2014-03-13 28 views
2

我有一個集合中的字段值,其中文檔看起來象下面這樣:的MongoDB - 檢查是否存在爲一個文件

/* 0 */ 

{ 
    "_id" : ObjectId("5320b1c723bc746084fa7107"), 
    "channels" : [ 
     3, 
     4 
    ] 
} 


/* 1 */ 

{ 
    "_id" : ObjectId("5320b1c723bc746084fa7107"), 
    "channels" : [ ] 
} 

我想形成一個查詢這樣的,我想去的地方渠道有一定的價值的所有文件並不是空的。

我嘗試這樣做:

db.event_copy.find({"channels":{$exists:true}}) 

但是,這仍然會返回我的文件與線路沒有值。

回答

1

我做到了用這個:

db.event_copy.find({'channels.0' : {$exists: true}}).count() 
11

您需要運營商$size。爲了找到沒有元素的東西做以下

db.collection.find({ channels: {$size: 0} }) 

如果你知道你有一個固定的大小,然後做

db.collection.find({ channels: {$size: 2} }) 

否則反向與$not

db.collection.find({ channels: {$not:{$size: 0}} }) 

你可以結合$and

db.collection.find({ $and: [ 
    { channels: {$not:{$size: 0}} }, 
    { channels: {$exists: true } } 
]}) 
+0

是我只是想在$大小運營商。問題是我想要所有具有一定價值的文件。我沒有多少價值可能會在裏面。基本上我不知道大小。我嘗試使用$ gte與$ size並且它似乎不起作用 –

+0

@PiHorse您不能執行範圍,但有一個條件。請參閱編輯。 –

+0

由於某些原因,查詢不會給我正確的結果。它還返回沒有通道字段本身的文檔。 –

1

退房大小運營商here

db.event_copy.find({ channels: { $size: 0 } }); 
+0

是的,我剛剛嘗試了$ size操作符。問題是我想要所有具有一定價值的文件。我沒有多少價值可能會在裏面。基本上我不知道大小。我嘗試使用$ gte與$大小,它似乎並沒有工作 –