我们有两个集合,其中用户和组织。
db.users.aggregate([
{$match: {"organization.metaInfo":{"$ne": "disabled"}}},
{"$unwind":"$organization"},
{"$group":{"_id":"$organization.organizationId", "count":{"$sum":1}}},
{$lookup: {from: "organisations",
localField: "_id",
foreignField: "_id", as: "orgDta"}},
{"$project":{"_id":1, "count":1,
"orgDta.organizationLicence.userCount":1
}}
])
执行此查询时,返回对我有利的结果。
{
"_id" : "768d3090-d4f5-11e7-a503-9b68b90cdb4e",
"count" : 5.0,
"orgDta" : [{
"organizationLicence" : {
"userCount" : 50
}
}]
},
{
"_id" : "d9933740-c29c-11e7-9481-b52c5f3e2e70",
"count" : 1.0,
"orgDta" : [{
"organizationLicence" : {
"userCount" : 1
}
}]
},
{
"_id" : "5386ebc0-c29b-11e7-9481-b52c5f3e2e70",
"count" : 1.0,
"orgDta" : [{
"organizationLicence" : {
"userCount" : 1
}
}]
}
现在,我想在count和userCount之间执行减法操作。但我不知道如何在这里使用。
我正在与 $ project
一起尝试{" $ project":{" _id":1," count":1," orgDta.dObjects":1, " orgDta.organizationLicence.userCount":1, " remainingUser":{$ subtract:[" $ orgDta.organizationLicence.userCount"," $ count"]}
但是Mongo会返回错误
{ "消息" :" cant $从数组减去adouble", "堆" :" MongoError:不能从数组中减去adouble" }
答案 0 :(得分:1)
使用$group
代替$unwind
(之前),像这样,
汇总管道
db.users.aggregate([
{
$unwind: '$orgDta'
}, {
$group: {
_id: '$_id',
remainingUser: {
$push: {
$subtract: ['$orgDta.organizationLicence.userCount', '$count']
}
}
}
}
])
我们在这里做的是展开目标数组,减去所有元素(在你的情况下,元素子元素的值),然后用结果(减法)值将数组分组。
在最终结果文档中添加您可能需要的其他项目,上面只是一个示例MongoDB聚合查询。