下面是我的代码:
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不想在我的代码的最后一行传递:道布,国籍,工作,电子邮件。如何传递变量?
编辑:
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)发布于 2011-02-16 03:07:51
目前,有一个限制,即您只能在投影中包含或排除,而不能同时包含和排除。因此,如果你要通过一个投影,它们要么全是1,要么全是0。
有一个例外,那就是当您使用覆盖索引时,您可以排除_id字段,而包括其他字段。
目前有一个票证要求您能够混合包含和排除,但它尚未实现。查看http://jira.mongodb.org/browse/SERVER-391
为了解决上面查询中的特定问题,我建议您对您的查询采取不同的方法...而不是通过设置1和0来创建投影,你可以简单地构建一个只包括你想要的东西而忽略其他东西的投影。例如,如下所示:
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)https://stackoverflow.com/questions/5008061
复制相似问题