如何使用MongoDB和C#驱动程序查询数组是空还是空?

Ste*_*ves 4 c# linq mongodb mongodb-.net-driver

背景:

我需要完成的是,如果记录中的特定数组为null或为空,则删除集合中的所有记录.

据我所知,查找空数组的C#Driver查询是:

IMongoQuery query = Query.Exists("myArray", false);
Run Code Online (Sandbox Code Playgroud)

这对于检测空数组很好,但有时数组不会为null,但不会有任何元素.我需要的更像是:

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

模型:

我的班级看起来像:

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

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

}
Run Code Online (Sandbox Code Playgroud)

摘要:

  1. 我应该使用什么C#Driver方法来查询数组是否为空?
  2. 或者,检查数组是空还是空的最佳方法是什么?

任何有关这方面的帮助将不胜感激!:)

Cra*_*son 13

您正在寻找$ size运算符.

Query.Size("myArray", 0) 如果数组为空,则为true.

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size


Poo*_*rna 5

$ exists仅匹配不存在的字段.如果某个字段存在,但它的值为null(BSON为null),则这些字段不与$ exists匹配.http://docs.mongodb.org/manual/reference/operator/query/exists/

但是,在两种情况下,检查字段值是否与空匹配:字段不存在,字段值也为空.http://docs.mongodb.org/manual/faq/developers/#faq-developers-query-for-nulls

所以,在这种情况下.它应该是两个标准的OR条件:1.字段:空2.字段大小= 0;

{"$或":[{"MyArray":{"$ size":0}},{"MyArray":null}]}


Mik*_*ank 5

请注意,$size 不能使用索引并且$or也有一些与索引相关的限制。我发现以下是查询具有空数组或未设置数组的文档的好方法,同时避免了 $or 和 $size 的限制。而且还很短!:)

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