2013-05-29 49 views
1

我有一個集合中的follwing項目:如何考慮在陣列只是第一個元素

{ 「_id」:1, 「丘壑」:[{A:1,B 2,C: 0},{a:1,b:2,c:1},{a:1,b:2,c:2}]}
{「_id」:2,「vals」:[{a:1 ,b:2,c:1},{a:1,b:2,c:2},{a:1,b:2,c:0}]
{「_id」:3, 「:[{a:1,b:2,c:2},{a:1,b:2,c:0},{a:1,b:2,c:1}]}

我想查找所有含有(vals.c> 1)的項目,但只考慮總是排列的第一個元素年。
這樣做以正確的方式,我只會得到項目:_id:2,_id:3在結果中。

以下follwing查找請求我得到的所有項目。

db.items.find({瓦爾斯:{$ elemMatch:{C:{$ GTE:1}}},{ 「瓦爾斯$。」:1}})

任何想法如何提出請求,獲得希望的結果?

回答

1

也許令人驚訝,你能做到像這樣:

db.items.find({ 'vals.0.c': { $gte: 1 } }) 

您可以選擇在查詢結果與$切片查詢投影算只返回第零數組元素:

db.items.find({ 'vals.0.c': { $gte: 1 } }, {'vals': {'$slice': 1}}) 

請參閱$slice,並且您可能還對新的$elemMatch投影算子感興趣。

+0

是的!你是對的!直到昨天晚上,我在訪問數組字段時不知道索引使用情況。感謝名單! – user1480734

+0

您是否通過purechange瞭解我如何通過匹配來減少結果集?在例子中,我得到了所有三個數組項。我嘗試使用$(query)和$(projection)-operator,但不幸的是,然後不允許通過索引訪問數組字段。 =( – user1480734

+0

編輯我的答案上面。 –

相關問題