计算mongodb聚合中其他文档中的项目
我有两份不同的文件计算mongodb聚合中其他文档中的项目,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我有两份不同的文件 Accounts [ {_id:1, name:'xyz'}, {_id:2, name:'abc'}, {_id:3, name:'def'}, {_id:4, name:'pqr'}, ] 及 如何计算单个帐户的true和false响应数,同时保持其原始字段 例如 我尝试使用$lookup将其他文档加入到一个字段中,但无法计算不同的响应 db.accounts.aggregate([ { $match: { _id: 2 }
Accounts
[
{_id:1, name:'xyz'},
{_id:2, name:'abc'},
{_id:3, name:'def'},
{_id:4, name:'pqr'},
]
及
如何计算单个帐户的true和false响应数,同时保持其原始字段
例如
我尝试使用$lookup将其他文档加入到一个字段中,但无法计算不同的响应
db.accounts.aggregate([
{
$match: { _id: 2 }
},
{
$lookup:{
from: 'responses',
localField: '_id',
foreignField: 'accountId',
as: 'responses'
}
}
])
有很多方法
消除不需要的数据$match
加入集合$lookup
解构阵列$unwind
重建数组,而$group
使用$sum
条件有助于增加1$cond
db.Accounts.aggregate([
{ $match: { _id: 2 } },
{
$lookup: {
from: "Responses",
localField: "_id",
foreignField: "accountId",
as: "responses"
}
},
{
$unwind: "$responses"
},
{
$group: {
_id: "$_id",
name: { $first: "$name" },
trueResponses: {
$sum: {
$cond: [{ $eq: [ "$responses.res", true]},1,0]
}
},
falseResponses: {
$sum: {
$cond: [{ $eq: [ "$responses.res", false]},1,0]
}
}
}
}
])
工作
db.accounts.aggregate([
{
$match: { _id: 2 }
},
{
$lookup:{
from: 'responses',
localField: '_id',
foreignField: 'accountId',
as: 'responses'
}
}
])
db.Accounts.aggregate([
{ $match: { _id: 2 } },
{
$lookup: {
from: "Responses",
localField: "_id",
foreignField: "accountId",
as: "responses"
}
},
{
$unwind: "$responses"
},
{
$group: {
_id: "$_id",
name: { $first: "$name" },
trueResponses: {
$sum: {
$cond: [{ $eq: [ "$responses.res", true]},1,0]
}
},
falseResponses: {
$sum: {
$cond: [{ $eq: [ "$responses.res", false]},1,0]
}
}
}
}
])