Пн goose, агрегатный запрос с $ lookup возвращает ноль? - PullRequest
0 голосов
/ 03 февраля 2020

Вариантальт Модель:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const varyantaltSchema = new Schema({
  _id: {
    type: Schema.ObjectId
  },
  varyantid: {
    type: String
  },
  altvaryantname: {
    type: String
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});

module.exports = mongoose.model("varyantalt", varyantaltSchema, "varyantalt");

Вариант модели:

const varyantSchema = new Schema({
  _id: {
    type: Schema.ObjectId
  },
  stokid: {
    type: Schema.ObjectId
  },
  varyantname: {
    type: String
  },
  createdAt: {
    type: Date,
    default: Date.now
  }
});

module.exports = mongoose.model("varyant", varyantSchema, "varyant");

Вариант коллекции:

{
    "_id": ObjectId("5e32286c34fb7322bdd566ed"),
    "stokid": ObjectId("5e28b4a2a1d9692b29a65b24"),
    "varyantname": "RENK"
}

Альтвариант коллекции:

{
    "_id": ObjectId("5e3228df34fb7322bdd566f5"),
    "varyantid": "5e32286c34fb7322bdd566ed",
    "altvaryantname": "KIRMIZI",
    "vars": [
        {
            "_id": ObjectId("5e35b1e410fce83f3370cd0a"),
            "images": {
                "imageurl": "http://",
                "_id": ObjectId("5e35b1e410fce83f3370cd0b"),
                "filename": "5320_7d93",
                "path": "https://res",
                "publicid": "panel"
            }
        }
    ]
},
{
    "_id": ObjectId("5e3359e6fa4c5e4bd9112fb6"),
    "varyantid": "5e32286c34fb7322bdd566ed",
    "altvaryantname": "SARI",
    "vars": [
        {
            "_id": ObjectId("5e35b1f610fce83f3370cd0d"),
            "images": {
                "imageurl": "http://",
                "_id": ObjectId("5e35b1f610fce83f3370cd0e"),
                "filename": "veli-fidan-1LT-2-450x450",
                "path": "https://",
                "publicid": "panel"
            }
        }
    ]
},
{
    "_id": ObjectId("5e335b64fa4c5e4bd9112fc9"),
    "varyantid": "5e32286c34fb7322bdd566ed",
    "altvaryantname": "YEŞİL",
    "vars": [
        {
            "_id": ObjectId("5e35b20010fce83f3370cd10"),
            "images": {
                "imageurl": "http://",
                "_id": ObjectId("5e35b20010fce83f3370cd11"),
                "filename": "maxresdefault-29-450x450",
                "path": "https://",
                "publicid": ""
            }
        }
    ]
}

Запрос:

varyant
  .aggregate([
    {
      $match: {
        stokid: mongoose.Types.ObjectId("5e28b4a2a1d9692b29a65b24")
      }
    },
    {
      $lookup: {
        from: "varyantalt",
        localField: "_id",
        foreignField: "varyantid",
        as: "vars"
      }
    },
    { $unwind: "$vars" }
  ])
  .exec((err, locations) => {
    if (err) throw err;
    console.log("res::", locations);
  });

Я пытаюсь получить результаты с помощью запроса $aggregate и $lookup с помощью mongoose Почему мой запрос возвращается пустым? Я не смог найти проблему.

Под $lookup оператором from: 'varyantalt' Я не понимаю точно, принимает ли оно пустое значение. Заранее спасибо за помощь.

1 Ответ

1 голос
/ 03 февраля 2020

В вашей varyantaltSchema схеме varyantid определяется как String, но должно быть Schema.ObjectId.

Они должны быть одинаковыми, потому что $ lookup выполняет сопоставление равенства в ForeignField и localField из входных документов

Если вы сохраните ваш Varandid как агрегат идентификатора объекта, будет работать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...