【问题标题】:How can I lookup between two arrays in Mongo?如何在 Mongo 中的两个数组之间查找?
【发布时间】:2017-03-28 05:56:51
【问题描述】:

我需要查找从 First Collection 到 SecondCollection 的 MIF。

FirstCollection
.
.
.
    {
        "_id" : ObjectId("58d24e8a0f8df93aa0e2ea3c"),
        "logR" : {
            "clientIP1" : "0.0.0.0",
            "clientIP2" : "0.0.0.0",
            "clientIP3" : "0.0.0.0"
        },
        "test" : [ 
            {
    			"logR" : {
    				"MIF" : "123"
                }
    		}
        ]
    }
.
.
.

SecondCollection
.
.
.
    {
        "_id" : ObjectId("58d90176bf95238e215f76fc"),
        "MIFDetails" : [ 
            {
                "MIF" : "123"
    		}
    	]
        
    }
.
.
.

我尝试了以下但还没有成功。

db.FirstCollection.aggregate([
    {
      $unwind: "$test"
    },
    {
      $unwind: "$MIFDetails"
    },
    {
      $lookup:
        {
          from: "SecondCollection",
          localField: "test",
          foreignField: "MIFDetails",
          as: "result"
        }
     },
     {
        $match: { "result": { $ne: [] } }

     },
     {
        $out : "resultCollection"
     }
])

我希望得到以下输出

 {
        "_id" : ObjectId("58d24e8a0f8df93aa0e555dd"),
        "logR" : {
            "clientIP1" : "0.0.0.0",
            "clientIP2" : "0.0.0.0",
            "clientIP3" : "0.0.0.0"
        },
        "test" : [ 
            {
    			"logR" : {
    				"MIF" : "123"
                }
    		}     
        ],      
        "result" : [         
          {      
           "_id" : ObjectId("58d90176bf95238e215f76fc"),     
           "MIFDetails" : [        
              {     
                  "MIF" : "123"     
    		      }     
    	    ]     
          }     
    }    

两个集合的 MIF 匹配,因此结果。这些集合在同一个数据库中。

【问题讨论】:

  • 第二个$unwind: "$MIFDetails",但是在第一个集合中没有"MIFDetails",所以在第二个$unwind 将不会返回任何结果并且进一步不会有数据作为输入管道。所以查询不会返回聚合数据。
  • @SureshMahawar 但是我如何展开第二个集合的 MIFDetails ?
  • @SureshMahawar 因为 MIFDetails 也是一个数组。如果有的话,你能建议一个不同的查询吗?

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

首先展开test字段,然后根据您的要求选择localField“test.LogR.MIF”和foreignField,例如“MIFDetails.MIF”。我做了如下查询。

db.test1.aggregate(
[{
    $unwind: "$test"
},{
      $lookup:
        {
          from: "test2",
          localField: "test.logR.MIF",
          foreignField: "MIFDetails.MIF",
          as: "result"
        }
},{
    $match: { "result": { $ne: [] } }

 },
 {
    $out : "resultCollection"
 }]
)

它返回预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 2021-10-25
    • 1970-01-01
    • 2014-06-26
    • 2012-01-12
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多