如何在Mongo中的两个数组之间进行查找?

时间:2017-03-28 05:56:51

标签: mongodb mongodb-query aggregation-framework

  

我需要从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匹配,因此结果。这些集合位于同一个数据库中。

1 个答案:

答案 0 :(得分:0)

首先展开测试字段,然后根据您的要求选择localField“test.LogR.MIF”,并选择“MIFDetails.MIF”等foreignField。我已经将查询作为以下内容。

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

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

它返回预期的结果。