MongoDB深层嵌套数组计数

时间:2018-12-03 21:06:07

标签: mongodb

我有一个简单的查询:

[
    user:{
       _id     : ObjectId('5c058b38365f0e1a0848d61d')
       receipts:[1,2,3,4,5,6,7]
    },
    user:{
       _id     : ObjectId('5c058b38365f0e1a0848ty56')
       receipts:[1,2,3,4,5]
    },
]

我需要获取收据的数组长度,我尝试了一些在网上找到的代码,但是没有一个起作用,这里有一个短代码:

mongo.collection('links').aggregate([{
                $match:{_id: mongo.ObjectId('5c058b38365f0e1a0848d61d')},
                $project: {
                    usersCount: {
                        $size: "$users.receipts"
                    }
                }
}]).toArray(function(err, results) {
               console.log(err,results);
});

我得到了错误:

  

** {MongoError:管道阶段规范对象必须恰好包含一个字段。

at process._tickCallback (internal/process/next_tick.js:61:11)   ok: 0,   errmsg:    'A pipeline stage specification object must
     

仅包含一个字段。”,代码:40323,代码名称:   'Location40323',名称:'MongoError',
  [Symbol(mongoErrorContextSymbol)]:{}} null **

谢谢

1 个答案:

答案 0 :(得分:1)

您缺少一堆花括号,这就是为什么您看到异常的原因。以下应该起作用:

[{
    $match: {
        _id: mongo.ObjectId('5c058b38365f0e1a0848d61d')
    }
}, {
    $project: {
        "usersCount": { $size: "$data.user.receipts" }
    }
}]