ru МОНГОД И РЕЗУЛЬТАТЫ РЕКУПЕРАЦИЙ Тодос Лос Элементос Кэ Тенгэн Эстадо Истин де ob Объето в частности, Эстой Трабаджандо Кон Мангуста

В отношении mongoDB 3.4 это невозможно. Вы не можете использовать DBRef в конвейере агрегации, за исключением этапа $ match .

Я настоятельно рекомендую вам избавиться от DBRef и перейти к справочным руководствам. Однако, если вам действительно нужно сохранить DBRef, вот (уродливое) решение:

сначала создайте новую коллекцию с именем «C», где DBRefs заменяются их идентификаторами, используя mapReduce:

db.A.mapReduce(
    function() {
        var key = this._id; 
        var value = [];  
        for ( var index = 0; index < this.bid.length; index++){
           value.push(this.bid[index].$id); 
        }
        emit(key, value); 
    },
    function(key,values) {
        return  values;
    },
    {
        "query": {},
        "out": "C" 
    }
)

, тогда запустите свой запрос агрегации в новой коллекции «C»:

db.C.aggregate([
   {
      $unwind:"$value"
   },
   {
      $lookup:{
         from:"B",
         localField:"value",
         foreignField:"_id",
         as:"bs"
      }
   }
]);

:

    {
       "_id":ObjectId("582abcd85d2dfa67f44127e1"),
       "value":ObjectId("582abcd85d2dfa67f44127e0"),
       "bs":[
          {
             "_id":ObjectId("582abcd85d2dfa67f44127e0"),
             "status":1,
             "seq":0
          }
       ]
    }{
       "_id":ObjectId("582abcd85d2dfa67f44127e1"),
       "value":ObjectId("582abcd85d2dfa67f44127e1"),
       "bs":[
          {
             "_id":ObjectId("582abcd85d2dfa67f44127e1"),
             "status":1,
             "seq":0
          }
       ]
    }

-2
задан Manuel Mendoza 28 March 2019 в 04:10
поделиться