我的文档看起来像这样(例如用途)。
{
"_id" : ObjectId("591675e89a89201e4d520c89"),
"raw_data_history" : {
"APR-2017" : [
{
"count" : "540421",
"reason" : "blah blah",
},
{
"count" : "111111",
"reason" : "blah blah 2",
}
],
"MAY-2017" : [
{
"count" : "13",
"reason" : "blah blah",
},
{
"count" : "100",
"reason" : "blah blah 2",
}
],
},
"review" : false,
"active" : true,
}
我想获得APR-2017拥有1个以上数组元素内容的集合中的所有文档。我尝试过以下方法:
db.getCollection('collections').find( {raw_data_history.APR-2017 : {$exists:true}, $where:'this.raw_data_history.APR-2017.length>1'} )
但我得到
Error: Line 1: Unexpected token .
我该怎么做?
答案 0 :(得分:1)
在聚合中使用$size
运算符。如果你想在没有聚合的情况下进行,你需要有一个字段来存储数组的大小。 $size documentation
db.collections.aggregate(
{$project : {numberOfElements : {$size : "$raw_data_history.APR-2017"}, doc : "$$ROOT"}},
{$match : {numberOfElements : {$gt : 1}}}
)
编辑:稍微澄清一下:
答案 1 :(得分:1)
如果要在对象内使用字段,则必须将该字段名称用引号(“”)传递。
以下查询工作符合您的要求。
db.getCollection('collections')。find({“raw_data_history.APR-2017.1”:{$ exists:true}})
将raw_data_history.APR-2017.1放在双引号中。