我有一个这样的集合:
{ "_id" : ObjectId("4d45bd25957a15b80702d4e4"), "codenum" : 10, "payment" : [
{
"pcode" : 100,
"amount" : 10000
},
{
"pcode" : 101,
"amount" : 6000
}
], "age" : 70 }
请注意,付款数组已嵌入此集合中。现在,我想在查找响应中仅检索与101匹配的付款代码。
提供这样的查询:
db.test.find({"codenum":10, "payment.pcode": 101},
{"codenum":1, "payment.pcode":1, "payment.amount":1})
将获取我的整个文档,包括其他支付pcodes,如上面的显示。
但是, 我需要这样的回复:
{ "_id" : ObjectId("4d45bd25957a15b80702d4e4"), "codenum" : 10, "payment" : [
{
"pcode" : 101,
"amount" : 6000
}
] }
这可能在mongodb吗?
在update()中,有一个位置匹配,可以像“payment。$。amount”一样使用,根据条件设置匹配字段。
可能是MongoDB可以支持这样的查询:
db.test.find({"codenum":10, "payment.pcode": 101},
{"payment.$.pcode": 1, "payment.$.amount":1})
然后只给出符合条件的那些条目。
有什么想法吗?
答案 0 :(得分:1)
据我所知,不可能只从MongoDB中的数组中选择一个条目。您只能返回文档中的某些字段(即您的付款数组),但您不能仅根据查询返回数组的一部分。 (您可以使用$slice
返回特定的索引分隔元素,但这不能满足您的需要。
您必须查询所有字段,或者不查询任何字段。 This JIRA ticket描述了问题,目前“已计划但尚未安排”。
目前,您只需要在应用程序代码中提取文档的相关部分。
答案 1 :(得分:1)
即使它仍在开发中,这将为您提供所需的功能。 http://www.mongodb.org/display/DOCS/Aggregation+Framework