2012-06-13 94 views
4

背景:如何使用MongoDB和C#驅動程序查詢數組是否爲空或空?

我需要做到的是,以消除任何記錄的集合中,如果在記錄一個特定的陣列爲空白或空。

據我所知,C#驅動程序查詢以找到一個空數組是:

IMongoQuery query = Query.Exists("myArray", false); 

即細用於檢測空數組,但有時陣列將不能爲空,但不會有任何的元素。我需要的是更喜歡:

// Note: second subquery will not work 
IMongoQuery query = Query.Or(
    Query.Exists("myArray", false), 
    Query.IsEmpty("myArray", false) // error 
); 

型號:

我的類會是什麼樣子:

public class MyClass 
{ 
    // This property may be null or empty 
    [BsonElement("myArray")] 
    public string[] MyArray { get; set; } 

    [BsonElement("someElement")] 
    public int SomeElement{ get; set; } 

} 

摘要:

  1. 什麼C#驅動程序的方法應該我用來查詢數組是否爲空?
  2. 或者,檢查數組是否爲空或空的最佳方法是什麼?

任何幫助,這將不勝感激! :)

回答

5

$只存在匹配不存在的字段。如果一個字段存在,但它的值爲空(BSON爲空),那麼這些字段不會被$ exists匹配。 http://docs.mongodb.org/manual/reference/operator/query/exists/

但是,在兩種情況下檢查字段值與空匹配:字段不存在,字段值爲空。 http://docs.mongodb.org/manual/faq/developers/#faq-developers-query-for-nulls

因此,在這種情況下。它應該是兩個標準的OR條件:1. field:null 2. field size = 0;

{ 「$或」:[{ 「MYARRAY」:{ 「$大小」:0}},{ 「MYARRAY」:空}]} MongoDB中收集

+0

這看起來是錯誤的。 MongoDB不允許$或$和$和操作符的數組。我在mongo shell中嘗試了這個,並且得到了'error:{「$ err」:「invalid operator:$ or」,「code」:10068}'。 –

+0

我只是從控制檯做了以下工作,它沒有任何錯誤的工作。 > db.array.insert({MyArray:[12,23]}) > db.array.find() {「_id」:ObjectId(「53ec3aac1f4db058b95d435e」),「MyArray」:[12,23]} > db.array.find({$或:[{MyArray:{$ size:0}},{MyArray:null}]}) > – Poorna

3

要查找空白數組字段使用下面的在Mongo shell中查詢 db.COLLECTION.find({ myArray: [] }).pretty();

用您的DB集合名稱更改COLLECTION。

0

請注意,$sizecan't use indexes$or也有幾個index related limitations。我發現以下是查詢具有空或非集數組的文檔的好方法,同時避免了$或$和$ size的限制。而且它也很短! :)

{myArray: {$in: [null, []]}}

相關問題