我有一个集合与看起来像条目:
{
"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})'就足够了,不需要位置操作符。尽管如此(正如Ryan在他的回答中已经提到的那样),有必要在应用程序端将字段从返回的数组中取出(这也包括文档的'_id')。缺点是,关于嵌套数组的'findOne'或'limit(1)'不起作用,如果您不期望超过1个结果,则这不会成为可能。 – proximus 2011-06-08 16:03:01