我有一个带有数组属性的Mongo集合,并且数组中包含“空”对象。我可以使用什么查询来定位只有{}的非空数组?
我尝试过$exists
和$where
的组合无济于事。
我需要定位的数据示例:
"arrayProperty" : [ {} ]
和
"arrayProperty" : [ {}, {} ]
编辑:
以下是架构的示例:
{
"_id" : ObjectId("53b1ca583d597ce7cbd54646"),
"arrayProperty" : [
{
"serialNumber" : "abc123",
"rfid" : "xyz098",
"size" : 95,
"points" : 50,
"frequency" : "Every day",
"dateAssigned" : ISODate("2011-02-10T15:27:39.000Z")
}
]
}
答案 0 :(得分:6)
如果您正在寻找arrayProperty
至少包含一个{}
的文档,那么它只是:
db.collection.find({ arrayProperty: {} })
如果您希望查找只有arrayProperty
包含一个或两个{}
的文档:
db.collection.find({ arrayProperty: {$in: [ [{}], [{}, {}] ] } })
答案 1 :(得分:2)
以下可能/可能不起作用......
db.collection.aggregate([
{$unwind: {"$arrayProperty"}},
{$match: {arrayProperty: {} }},
{$group: {_id: "$_id"} }
])
基本上我要做的是unwind
arrayProperty
,将arrayProperty
作为{}
和group
所有文件拉出来已退回的文档具有相同的_id
(或者您可以使用您使用的任何唯一键字段替换它)。
同样,我不确定这是否有效,所以试试看,让我知道。