【发布时间】:2011-09-10 22:28:49
【问题描述】:
我有一个条目看起来像这样的集合:
{
"userid": 1,
"contents": [
{ "tag": "whatever", "value": 100 },
{"tag": "whatever2", "value": 110 }
]
}
我希望能够查询该集合并仅返回数组的一部分:与查询匹配的部分。我正在尝试使用 $ 位置运算符来执行此操作,但到目前为止还没有成功。
这更准确地说是我想做的:
collection.find({'contents.tag':"whatever"},{'contents.$.value':1})
因此,我希望只有与匹配查询的数组中的条目相对应的值,在这种情况下为 100。
你知道怎么了吗?我在想也许 $ 运算符只能用于更新而不是查询。有知道的吗?
谢谢!
【问题讨论】:
-
只是为了只返回您的值字段,
collection.find({'contents.tag':'whatever'},{'contents.value':1})就足够了,不需要位置运算符。尽管如此(正如瑞安在他的回答中已经提到的那样),有必要在应用程序端将字段从返回的数组(也包括文档的_id)中拉出来。缺点是与嵌套数组有关的findOne或limit(1)不起作用,如果您不期望超过 1 个结果,这不会是一个问题。