0

您好,我正在尝试加入不同集合中的文档

$lookup: {
  from: 'operation',
  localField: 'operations._id',
  foreignField: '_id',
  as: 'string'
}

我尝试了一切,但没有任何效果,我希望通过 id 连接来进行所有操作。

这是我的第一份文件 在此处输入图像描述

这是我的第二份文件 在此处输入图像描述

4

1 回答 1

0

你只需要更换

localField: 'operations._id'

和:

localField: 'operations.$id',

这是我尝试过的:

  1. 插入一些操作:

     db.insert.Operation([
       {
         operationName: "test",
         data: [1, 2, 3],
       },
       {
         operationName: "xx",
         data: [4, 5, 6],
       },
       {
         operationName: "AA",
         data: [7, 8, 9],
       },
       {
         operationName: "CCC",
         data: [10, 11, 12],
       },
       {
         operationName: "PPP",
         data: [13, 14, 15],
       },
       {
         operationName: "IIII",
         data: [16, 17, 18],
       },
     ]);
    
  2. 插入第一个文档,我调用了集合Employee

     db.insert.Employee([
       {
         firstName: "chuck",
         ladtName: "Norris",
         enabled: true,
         operations: [
           {
             $ref: "Operations",
             $id: ObjectId("6044ebeede8ee738e720d3a5"),
           },
           {
             $ref: "Operations",
             $id: ObjectId("6044ebeede8ee738e720d3a6"),
           },
           {
             $ref: "Operations",
             $id: ObjectId("6044ebeede8ee738e720d3a8"),
           },
           {
             $ref: "Operations",
             $id: ObjectId("6044ebeede8ee738e720d3a9"),
           },
           {
             $ref: "Operations",
             $id: ObjectId("6044ebeede8ee738e720d3aa"),
           },
         ],
       },
     ]);
    
  3. 我写了这个查询:

     db.Employee.aggregate([{
         $lookup:{
             from:"Operation",
             localField:"operations.$id",
             foreignField:"_id",
             as:"Result"
         }
     }])
    

这就是它的全部。

结果如下:

{ 
    "_id" : ObjectId("6044eee6de8ee738e720d3ab"), 
    "firstName" : "chuck", 
    "ladtName" : "Norris", 
    "enabled" : true, 
    "operations" : [
        DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a5")), 
        DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a6")), 
        DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a8")), 
        DBRef("Operations", ObjectId("6044ebeede8ee738e720d3a9")), 
        DBRef("Operations", ObjectId("6044ebeede8ee738e720d3aa"))
    ], 
    "Result" : [
        {
            "_id" : ObjectId("6044ebeede8ee738e720d3a5"), 
            "operationName" : "test", 
            "data" : [
                1.0, 
                2.0, 
                3.0
            ]
        }, 
        {
            "_id" : ObjectId("6044ebeede8ee738e720d3a6"), 
            "operationName" : "xx", 
            "data" : [
                4.0, 
                5.0, 
                6.0
            ]
        }, 
        {
            "_id" : ObjectId("6044ebeede8ee738e720d3a8"), 
            "operationName" : "CCC", 
            "data" : [
                10.0, 
                11.0, 
                12.0
            ]
        }, 
        {
            "_id" : ObjectId("6044ebeede8ee738e720d3a9"), 
            "operationName" : "PPP", 
            "data" : [
                13.0, 
                14.0, 
                15.0
            ]
        }, 
        {
            "_id" : ObjectId("6044ebeede8ee738e720d3aa"), 
            "operationName" : "IIII", 
            "data" : [
                16.0, 
                17.0, 
                18.0
            ]
        }
    ]
}
于 2021-03-07T15:39:48.220 回答