node.js - 聚合 mongoose nodejs $match 不起作用

标签 node.js mongodb mongoose aggregation-framework

AllianceMember.aggregate([{
                $match : { ally_id : alliance._id } ,
                $lookup:
                  {
                    from: 'users',
                    localField: 'user_id',
                    foreignField: '_id',
                    as: 'users'
                  }
 }]).then((members) => {});

所以基本上我想要实现的是 get members that are in alliance然后我将它们聚合为 users table 。这部分代码有效。但现在我需要过滤members that are in alliance来自alliances收藏。

AllianceMember _id user_id ally_id

Alliance _id title leader

我需要在联盟页面中显示具有 ally_id 的用户等于 alliance_id 。没有$match功能我让所有成员都出现在每个联盟中。

我遇到的错误 $match: Arguments must be aggregate pipeline operators

最佳答案

您搞乱了 $lookup$match 阶段。 而且您也没有将 ally_idString 转换为 mongoose ObjectId

应该是这样的

db.aggregate([
  { "$match": { "ally_id": mongoose.Types.ObjectId(alliance._id) } },
  { "$lookup": {
    "from": "users",
    "localField": "user_id",
    "foreignField": "_id",
    "as": "users"
  }}
])

关于node.js - 聚合 mongoose nodejs $match 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457861/

相关文章:

node.js - 在Heroku上安装Nightmare.js

arrays - 可变的用户选择

mongodb - 在 ubuntu 15.04 中安装 mongodb

node.js - 排序在 mongodb 中不起作用

javascript - 为什么 'find' 查询在 MongoDB 中返回一个 Query 对象?

json - 将文本文件转换为干净的 JSON 格式

node.js - npm Bower 安装失败(卡在同一位置)

javascript - Mongo 外壳光标 : updated documents get to cursor again

node.js - mongoose findById 或 findone 不起作用

node.js - mongoose.findOneAndUpdate() 更改保存在我的 Express 应用程序中的值