【发布时间】:2016-02-20 00:34:45
【问题描述】:
我正在尝试使用 tornado 和 python 从 MongoDB 集合中检索值。
我为搜索提供的值在列表中,我希望列出整个集合,但给定值以外的值不得显示在列表变量中。
我在表格中的数据:
{
"_id" : ObjectId("564b313b3f32df05fc905570"),
"RequiredDate" : "17-11-2015",
"RequestedDate" : "17-11-2015",
"Pid" : [
"564b22373f32df05fc905564",
"5630baac3f32df134c18b682"
],
"email" : "abishek@gmail.com",
"UName" : "abishek",
"Uid" : "564b21003f32df05fc905563",
"phone" : "9988776655",
"PName" : [
"balu",
"prakash"
],
"Registration" : [
"TN 45 AG 5688",
"TN 45 AS 5655"
],
"Rid" : "564b313b3f32df05fc905570"
}
我的查询:
db.collection.find({"Rid" : "564b313b3f32df05fc905570"},{"Pid": {$elemMatch:{"Pid":"5630baac3f32df134c18b682","Registration": "TN 45 AS 5655"}}},{"_id": false}).pretty()
想要的输出是:
{
"_id" : ObjectId("564b313b3f32df05fc905570"),
"RequiredDate" : "17-11-2015",
"RequestedDate" : "17-11-2015",
"Pid" : "5630baac3f32df134c18b682",
"email" : "abishek@gmail.com",
"UName" : "abishek",
"Uid" : "564b21003f32df05fc905563",
"phone" : "9988776655",
"PName" : [
"balu",
"prakash"
],
"Registration" : "TN 45 AS 5655",
"Rid" : "564b313b3f32df05fc905570"
}
$elemMatch 是获取输出的正确方法,还是有其他方法可以实现所需的输出。
说明:
在建议的答案中,列表中有一个 JSON 对象,这里我有一个特定的值,只有 Pid 知道从另一个表接收的注册值与此特定记录中的注册值匹配,并且然后显示为单个记录,而不显示其他 Pid 和注册。
而且我在输出中只得到_id,而不是整个修改后的记录。
【问题讨论】:
-
@AnirudhModi 有一个
$elemMatch版本用于投影而不是作为查询运算符。但是“投影”的一般情况是您需要包含地指定“所有内容”或仅排除您不想要的内容。因此,如果您想要“所有字段”,那么您必须要求“所有字段”。 -
我误解了这个问题..感谢您的链接..我认为这是不可能的..
-
db.collection.find({"Rid" : "564b313b3f32df05fc905570"},{"Pid": {$elemMatch:{"Pid":"5630baac3f32df134c18b682"}},"注册":{$ elemMatch:{"Registration": "TN 45 AS 5655"}}},{"_id": false}).pretty() 您在 pid 的 elemMatch 中使用了注册,但可能没有给您想要的结果。
-
@AnirudhModi 在输出
{ "_id" : ObjectId("564b313b3f32df05fc905570") }中只得到这个
标签: python mongodb mongodb-query