Mongodb запрос нескольких коллекций - PullRequest
0 голосов
/ 06 июля 2018

у меня две коллекции

Пользователь

[{
    "id":1,
    "name":"a1",
    "emailAddress":"1@s.com",
},
{
    "id":2,
    "name":"a2",
    "emailAddress":"2@s.com",
},
{
    "id":3,
    "name":"a3",
    "emailAddress":"3@s.com",
}]

Organaziation

[{
    "emailAddress": "1@s.com",
    "name" : "org1"
},
{
    "emailAddress": "2@s.com",,
    "name" : "org1"
},
{
    "emailAddress" : "3@s.com",
    "name" : "org2"
}]

Теперь я хочу получить всех пользователей для организации org1 , как показано ниже

[{
    "id":1, "name":"a1", "emailAddress":"1@s.com","orgName" : "org1"
},
{
    "id":2, "name":"a2", "emailAddress":"2@s.com","orgName" : "org1"
}]

Я проверил debRef и lookup, но они возвращаются во вложенном

Как мне этого добиться?

1 Ответ

0 голосов
/ 06 июля 2018

Вы можете просто достичь этого, используя $lookup и $project агрегации

Если у вас версия mongodb 3.6 и выше

db.users.aggregate([
  { "$lookup": {
    "from": Organisation.collection.name,
    "let": { "emaildid": "$emaildid" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$emaildid", "$$emaildid" ] } } }
    ],
    "as": "organisation"
  }},
  { "$unwind": "$organisation" },
  { "$project": {
    { "id": 1, "name": 1, "emailid": 1, "org": "$organisation.org1" }
  }}
])

Если у вас версия mongodb 3.4 и ниже

db.users.aggregate([
  { "$lookup": {
    "from": Organisation.collection.name,
    "localField": "emaildid",
    "foreignField": "emaildid",
    "as": "organisation"
  }},
  { "$unwind": "$organisation" },
  { "$project": {
    { "id": 1, "name": 1, "emailid": 1, "org": "$organisation.org1" }
  }}
])

попробуйте также $replaceRoot

db.Organisation.aggregate([
  { "$match": { "name": "org1" }},
  { "$lookup": {
    "from": Organisation.collection.name,
    "let": { "emailAddress": "$emailAddress", "name": "$name" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$emailAddress", "$$emailAddress" ] } } },
      { "$addFields": { "orgName": "$$name" }}
    ],
    "as": "users"
  }},
  { "$unwind": "$users" },
  { "$replaceRoot": { "newRoot": "$users" } }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...