2013-08-01 117 views
2

日期之間陣列I有蒙戈文件:找到在蒙戈

{ 
    id:1 
    time:[ 
     1, 
     2, 
     10 
    ] 
} 
{ 
    id:2 
    time:[ 
     1, 
     4, 
     8, 
     10 
] 
} 

我想找到的所有文件,其具有3和5之間或7或9(文件編號爲2)之間的時間。我不知道這是怎麼回事。

我嘗試:

mongo.find($or : [{time:{$gte:3, $lte:5}}, {time:{$gte:7, $lte:9}}]) 

和蒙戈返回ID爲1和2的文件,但我需要ID2與時間[4,8]。

如何將一個條件應用到數組的每個元素,但不是整個數組?

p.s.大小排列的「時間」也許不同

回答

2

嘗試使用$elemMatch操作:

mongo.find({time:{$elemMatch: {$gte:3,$lte:5}}}) 

想配:

mongo.find( 
    { 
    $or: [ 
     {time:{$elemMatch: {$gte:3,$lte:5}}}, 
     {time:{$elemMatch: {$gte:7,$lte:9}}} 
    ] 
    } 
) 
+0

謝謝,它的工作! – user2641510

+0

如果'time'是一個對象數組而不是數組數組呢? – Tony

3

如果您使用的是「時間」陣列作爲另一個數組的佔位符的存儲,那麼以前的評論與elemMatch應該幫助你,因爲這應該與其他數字搜索,如考試分數。

但是,如果您使用它來處理日期/時間等等,那麼您可能會更好地使用unix時間戳進行存儲,因爲這是通過整數完成的,並且很容易在mongodb中進行搜索和存儲,並且支持很容易那裏有大多數的編程語言。 (例如在php:mktime()和DateTime :: getTimestamp())。