MongoDB, как сделать $ project (ограничить поля) из удаленной коллекции $ lookup? - PullRequest
0 голосов
/ 05 января 2019

Я хочу $ lookup для удаленной коллекции, такой как SQL Join, но с Mongo. И я не хочу, чтобы все ключи из удаленного документа перетаскивались в исходную коллекцию - только некоторые конкретные ключи.

Вот что я пробовал:

[
  {
    $lookup: {
        from: "tables",
        localField: "type",
        foreignField: "_id",
        as: "type"
      }
    },
    {
      $unwind: "$type"
    },
  },
  {
    $project: {
      "type.title": 1
    }
  }
]

Однако при этом печатается только «type.title» и игнорируются все остальные ключи, даже из исходного документа.

Есть ли какой-нибудь способ сказать MongoDB вытягивать только определенные поля из удаленной коллекции?

1 Ответ

0 голосов
/ 06 января 2019

Вы можете использовать агрегацию ниже с mongodb 3.6 и выше

[
  { "$lookup": {
    "from": "tables",
    "let": { "type": "$type" },
    "pipeline": [
      { "$addFields": { "owners": { "$cond": { "if": { "$ne": [ { "$type": "$owners" }, "array" ] }, "then": [], "else": "$owners" } } }},
      { "$match": { "$expr": { "$eq": ["$_id", "$$type"] }}},
      { "$project": { "title": 1 }}
    ],
    "as": "type"
  }},
  { "$unwind": "$type" }
]
...