首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MongoDB或NoSQL DB中无法在键返回中传递变量?

在MongoDB或NoSQL DB中无法在键返回中传递变量?
EN

Stack Overflow用户
提问于 2011-02-16 02:45:58
回答 1查看 588关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
    dob = 1
    email = 1
    nationality = 1
    work = 1
    situation = 1
    skype = 1
    user_id = ObjectId(self.get_argument("id"))
    contact_id = ObjectId(self.get_argument("contactId"))
    contact_confidentiality = db.cara.users.find_one({"_id" : contact_id}, {"profil.private.confidential" : 1})
    confidentiality = []
    for i in contact_confidentiality["profil"]["private"]["confidential"]:
      if i == "dob":
    dob = 0
      elif i == "email":
    email = 0
      elif i == "nationality":
    nationality = 0
      elif i == "work":
    work = 0
      elif i == "situation":
    situation = 0
      elif i == "skype":
    skype = 0
      elif i == "facebook":
    facebook = 0

contact = db.cara.users.find_one({"_id" : contact_id}, {"profil.private.first_name": 1, "profil.private.last_name": 1, "profil.gender": 1, "profil.dob": dob, "profil.nationality": nationality, "profil.work": work, "profil.private.email_address": email, "profil.private.situation": situation, "profil.private.skype": skype})

MongoDB不想在我的代码的最后一行传递:道布,国籍,工作,电子邮件。如何传递变量?

编辑:

代码语言:javascript
复制
 contact_confidentiality = db.cara.users.find_one({"_id" : contact_id}, {"profil.private.confidential" : 1})

projection = {
    'profil.private.first_name' :1 ,
    'profil.private.last_name' : 1,
    'profil.gender' : 1,
    'profil.dob' : 1,
    'profil.private.email_address' : 1,
    'profil.nationality' : 1,
    'profil.work' : 1,
    'profil.private.situation' : 1,
    'profil.private.skype' : 1,
    'profil.facebook' : 1
  } 


for i in contact_confidentiality["profil"]["private"]["confidential"]:
  i_json = self._doc_to_json(i)
  logging.info(i_json)
  del projection[i_json] # I need a key like "profil.nationality" but my key is "nationality"


contact = db.cara.users.find_one({"_id" : contact_id}, projection)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-16 03:07:51

目前,有一个限制,即您只能在投影中包含或排除,而不能同时包含和排除。因此,如果你要通过一个投影,它们要么全是1,要么全是0。

有一个例外,那就是当您使用覆盖索引时,您可以排除_id字段,而包括其他字段。

目前有一个票证要求您能够混合包含和排除,但它尚未实现。查看http://jira.mongodb.org/browse/SERVER-391

为了解决上面查询中的特定问题,我建议您对您的查询采取不同的方法...而不是通过设置1和0来创建投影,你可以简单地构建一个只包括你想要的东西而忽略其他东西的投影。例如,如下所示:

代码语言:javascript
复制
user_id = ObjectId(self.get_argument("id"))
contact_id = ObjectId(self.get_argument("contactId"))
contact_confidentiality = db.cara.users.find_one({"_id" : contact_id}, {"profil.private.confidential" : 1})

projection = {
  'profil' : { 
     'private' : {  
        'first_name': 1,
        'last_name':1,
        'gender':1,
        'dob' : 1,
        'email' : 1,
        'nationality': 1,
        'work' : 1,
        'situation' : 1,
        'skype' : 1,
        'facebook' : 1
     }
   }
} 
for i in contact_confidentiality["profil"]["private"]["confidential"]:
  projection['profil']['private'].remove(i)

contact = db.cara.users.find_one({"_id" : contact_id}, projection)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5008061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档