背景
如果记录中的特定数组为null或为空,我需要完成的是删除集合中的所有记录。
据我所知,查找空数组的C#Driver查询是:
IMongoQuery query = Query.Exists("myArray", false);
这对于检测空数组很好,但有时数组不会为null,但不会有任何元素。我需要的更像是:
// 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; }
}
要点:
对此有任何帮助将不胜感激! :)
答案 0 :(得分:13)
您正在寻找$ size运算符。
如果数组为空, Query.Size("myArray", 0)
将为真。
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size
答案 1 :(得分:5)
$ exists仅匹配不存在的字段。如果某个字段存在,但它的值为null(BSON为null),则这些字段与$ exists不匹配。 http://docs.mongodb.org/manual/reference/operator/query/exists/
但是,在两种情况下,检查字段值是否匹配null:字段不存在,字段值也为null。 http://docs.mongodb.org/manual/faq/developers/#faq-developers-query-for-nulls
所以,在这种情况下。它应该是两个标准的OR条件:1。字段:空2.字段大小= 0;
{“$或”:[{“MyArray”:{“$ size”:0}},{“MyArray”:null}]}
答案 2 :(得分:3)
要在MongoDb集合中查找空白数组字段,请在Mongo shell中使用以下查询
db.COLLECTION.find({ myArray: [] }).pretty();
使用您的数据库集合名称更改COLLECTION。
答案 3 :(得分:2)
请注意,$size
can't use indexes和$or
也有一些index related limitations。我发现以下是查询具有空数组或非设置数组的文档的好方法,同时避免了$或$ size的限制。它也很短! :)
{myArray: {$in: [null, []]}}