Mongodb $lookup 使用多个条件 mongodb

Posted

技术标签:

【中文标题】Mongodb $lookup 使用多个条件 mongodb【英文标题】:Mongodb $lookup using with multiple criteria mongodb 【发布时间】:2020-09-07 20:02:13 【问题描述】:

    $lookup: 
      from: "Comment",
      let: 
        p_id: "$_id",
        d_id: "$data_id",

      ,
      pipeline: [
        
          $match: 
            $expr: 
              $and: [
                
                  $eq: [
                    "$_id",
                    "$$p_id"
                  ]
                ,
                
                  $eq: [
                    "$data_id",
                    "$$d_id"
                  ]
                
              ]
            
          
        
      ],
      as: "subComment"
    
  

https://mongoplayground.net/p/GbEgnVn3JSv 我擅长 mongoplayground,但试图把我的想法放在那里

我想获取基于 doc_id 和 post_id 的帖子评论,用于 mainComment 查询看起来不错,但子命令不好。请指导一下

它很简单,因为一个帖子可以有多个评论,需要评论计数基于 Post.data._id 等于 Comment.doc_id 和 Post._id 在 Comment.post_id 中

【问题讨论】:

【参考方案1】:

不确定“mainComment”和“subComment”是什么,我相信你错过了前面的美元符号

  
    $project: 
      _id: 1,
      main_comments_count: 
        $size: "$mainComment"
      ,
      sub_comments_count: 
        $size: "$subComment"
      ,

    
  

更新

你在操场上做错的是你在lookup.let阶段使用了$data$data 是一个文档,您实际要查找的字段是 $data._id

旁注:如果您只使用一个字段进行查找,您可以在查找阶段简单地使用localFieldforeign。那里不需要使用letpipeline
db.setting.aggregate([
  
    $lookup: 
      from: "site",
      "let": 
        "pid": "$data._id"   //here
      ,
      "pipeline": [
        
          "$match": 
            "$expr": 
              "$in": [
                "$doc_id",
                "$$pid"
              ]
            
          
        
      ],
      "as": "subComment"
    
  ,
  
    $addFields: 
      countRecord: "$subComment"
    
  
])

即这给出了相同的输出

db.setting.aggregate([
  
    $lookup: 
      from: "site",
      localField: "data._id",
      foreignField: "doc_id",
      as: "subComment"
    
  ,
  
    $addFields: 
      countRecord: "$subComment"
    
  
])

【讨论】:

更新了操场上的代码,它应该返回我两个,而不是 0 见操场https://mongoplayground.net/p/GbEgnVn3JSv @SunilDubey 首先,我认为您将不得不使用“arrayElemAt”从数组中获取第一个文档。其次,在“eq”中,您应该使用“$post_id”和“$doc_id”,如第二个集合中所示 如果我想显示计数 "data": [ "_id": ObjectId("5e7cd2019b1c522b15cca6fe"), "url": "xyz.jpg", "width": 1000, “高度”:1000,“计数”:2,“_id”:ObjectId(“5e7cd2019b1c522b15cca6fd”),“url”:“verr.jpg”,“宽度”:601,“高度”:1000]跨度> 你可以看到这个匹配数据的_id 5e7cd2019b1c522b15cca6fe 所以它应该添加到这个数组中是可能的 好的@chakwok,一旦你回到电脑,我也在尝试..

以上是关于Mongodb $lookup 使用多个条件 mongodb的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongodb 中应用 $lookup 条件?

Mongodb Lookup 无法正常工作

如何在 mongodb 中使用 $lookup 加入多个集合

根据 MongoDB 中的值进行条件 $lookup 吗?

使用SpringMVC + MongoDB时,用or条件匹配关键字时遇到的问题?

loopkup mongodb之后条件的多个匹配项