MongoDB查询根据条件限制值

时间:2011-01-30 20:08:35

标签: arrays mongodb

我有一个这样的集合:

{ "_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})

然后只给出符合条件的那些条目。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

据我所知,不可能只从MongoDB中的数组中选择一个条目。您只能返回文档中的某些字段(即您的付款数组),但您不能仅根据查询返回数组的一部分。 (您可以使用$slice返回特定的索引分隔元素,但这不能满足您的需要。

您必须查询所有字段,或者不查询任何字段。 This JIRA ticket描述了问题,目前“已计划但尚未安排”。

目前,您只需要在应用程序代码中提取文档的相关部分。

答案 1 :(得分:1)

即使它仍在开发中,这将为您提供所需的功能。 http://www.mongodb.org/display/DOCS/Aggregation+Framework