如何在mongoDB

时间:2018-01-20 19:19:33

标签: node.js mongodb mongoose aggregate

我们有两个集合,其中用户组织

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" }

1 个答案:

答案 0 :(得分:1)

使用$group代替$unwind(之前),像这样,

汇总管道

db.users.aggregate([
        {
            $unwind: '$orgDta'
        }, {
            $group: {
                _id: '$_id',
                remainingUser: {
                    $push: {
                        $subtract: ['$orgDta.organizationLicence.userCount', '$count']
                    }
                }
            }
        }
    ])

我们在这里做的是展开目标数组,减去所有元素(在你的情况下,元素子元素的值),然后用结果(减法)值将数组分组。

在最终结果文档中添加您可能需要的其他项目,上面只是一个示例MongoDB聚合查询。