如何使用mongodb中主集合的objectID在另一个集合中查找

ds97

我正在尝试通过查找从另一个集合中获取数据

收集“用户”

{
    "_id":{
        "$oid":"60bf4bb31f45d98903d1851f"
    },
    "name":"Dave",
    "center":"THGJ556",


}

集合“地址”

{
    "_id":{
        "$oid":"60bf4bb31f45d98903d1851f"
    },
    "userId":"60bf4bb31f45d98903d1851f",    
}

收集“应用程序”

{
    "_id":{
        "$oid":"60bf4bb31f45d98903d1851f"
    },
    "userId":"60bf4bb31f45d98903d1851f",
    "centerId":"THGJ556",   

},
{
    "_id":{
        "$oid":"60bf4bb31f45d98903d3647j"
    },
    "userId":"60bf4bb31f45d98903d1851f",
    "centerId":"JHGJ5476",  

}

现在我需要所有表中的数据。

这是我的代码:

users.aggregate([
        
        {
          $lookup: {
            from: "addresses",
            localField: "_id",
            foreignField: "userId",
            as: "addressData"
          }
        },

        {
          $lookup: {
            from: "applications",
            pipeline: [
              { $match: 
                { userId:"$_id", centerId: "JHGJ5476"} 
              },
           ],
           as: "applicationData"
          }
        },
        
      ] ,function(err,  result) {
        
        if (err) {
          console.log(err)
          
        } else {
          console.log(result)
        }        
      });

在管道中使用聚合和匹配时我做错了。

我正确地获取了 addressData,但在 applicationData 中什么也没有得到,因为我怀疑 userId:"$_id" 有问题

杰夫

正如文档解释的那样:

$match 阶段需要使用 $expr 运算符来访问变量。$expr 允许在 $match 语法中使用聚合表达式。

所以你必须使用$exprinto $matchstage 和letstage。

  • letstage 是定义要使用的变量到$expr: id: $_id
  • $expr$andand$eq一起使用是为了获得这两个条件。
db.users.aggregate([
  {
    $lookup: {
      from: "addresses",
      localField: "_id",
      foreignField: "userId",
      as: "addressData"
    }
  },
  {
    $lookup: {
      from: "applications",
      let: {"id": "$_id"},
      pipeline: [
        {
          $match: {
            "$expr": {
              "$and": [
                {"$eq": ["$userId","$$id"]},
                {"$eq": ["$centerId","JHGJ5476"]}
              ]
            }
          }
        }
      ],
      as: "applicationData"
    }
  }
])

检查这个例子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在一个集合中查找未被另一个集合中的文档引用的MongoDB文档?

如何使用集合理解在集合中查找不在另一个集合中的单个元素

如何使用另一个集合中的信息过滤MongoDB集合?

mongoDB 从一个集合中查找并保存在另一个集合中

如何使用同一数据库中另一个集合的数据创建 mongoDB 集合

如何将集合复制到 mongoDB 中的另一个新集合

使用mongoose nodejs在另一个集合mongoDB中填充集合

如何查找一个dstore集合中而不是另一个dstore集合中的项目?

Mongodb将一个集合复制到另一个集合中

MongoDB 使用另一个集合中的另一个字段更新字段

如何查找列表/集合是否正好在另一个列表中

如何确定一个集合是否包含Python中的另一个集合

如何在另一个集合中拥有一个集合?

如何在firebase中从一个集合访问另一个集合

从另一个集合的GetData MongoDB的合计$查找

如何使用mongodb合并两个集合结果和另一个集合

如何使用 nodejs 通过 objectId 和 mongodb 中的另一个字段查找文档?

如何有条件地从另一个集合中删除MongoDB?

如何获取另一个集合中引用的MongoDB文档的列表

如何在 mongoDB 中查询每个文档的另一个集合

在 mongodb 中的另一个集合的 foreignField 上使用 $group 进行分组

根据另一个集合中的ID对mongodb集合项进行排名

将MongoDB(3.0)集合的子集保存到Python中的另一个集合

将集合数组放入mongodb的另一个集合中

如何获取Firebase中另一个集合的文档中的集合

使用声明式查找一个集合中的字符串是否是另一个集合中的字符串的子字符串?

mongodb-查找逗号分隔另一个集合中的值并获取详细信息

如何基于Python中的另一个集合对集合进行排序?

如何将集合添加到Cloud Firestore中的另一个集合?