我有一個集合與看起來像條目:
{
"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