Поиск по переопределенным полям в разных коллекциях в mongodb - PullRequest
1 голос
/ 27 апреля 2020

У меня есть две коллекции, глобальная и локальная. Глобальный содержит глобальные данные, а локальный содержит переопределенные данные.

Документ в глобальном выглядит следующим образом:

{
    "sku" : "MAYBE0000001",

    "color" : "BLUE",
    "gender" : "F",
    "variant" : null,
    "price" : "1000"
})

Документ в локальном выглядит как

{
    "sku" : "MAYBE0000001",
    "price" : "1500"
}

Я хочу для поиска:

  1. Для диапазона цен от 1300 до 1800 поиск должен дать мне продукт MAYBE0000001, поскольку он переопределен.
  2. Для диапазона цен от 700 до 1300 поиск должен дать мне 0 результатов.
  3. Для поиска по полу "F" я должен получить sku MAYBE0000001, поскольку он не переопределен.

Как выполнить запрос после слияния цены. В будущем цвет может быть переопределен.

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете сделать с помощью $lookup

  1. Для диапазона цен от 1300 до 1800 поиск должен дать мне продукт MAYBE0000001, так как он переопределен.
  2. Для диапазон цен от 700 до 1300 поисков должен дать мне 0 результатов.

Я начал запрос в локальной коллекции. И написал запрос диапазона.

или поиск по полу "F", я должен получить sku MAYBE0000001, поскольку он не переопределен.

Для этого я применил $match после поиска.

Здесь я пишу запрос для того же:

db.local.aggregate([
  {
    $match:{
      "price":{
        $gt:"1300",
        $lte:"1800"
      }
    }
  },
  {
    $lookup:{
      from:"global",
      let:{
        "sku":"$sku"
      },
      pipeline:[
        {
          $match:{
            $expr:{
              $eq:[
                "$sku",
                "$$sku"
              ]
            }
          }
        }
      ],
      as:"lookups"
    }
  },
  {
    $unwind:"$lookups"
  },
  {
    $project:{
      "sku":1,
      "price":1,
      "gender":"$lookups.gender",
      "color":"$lookups.color",
      "variant":"$lookups.variant"
    }
  },
  {
    $match:{
      "gender":"F"
    }
  }
]).pretty()

Вывод

{
        "_id" : ObjectId("5ea6f19ac3798d09bdd1c516"),
        "sku" : "MAYBE0000001",
        "price" : "1500",
        "gender" : "F",
        "color" : "BLUE",
        "variant" : null
}

Подробнее о $lookup см. здесь .

надеюсь, это поможет :) 1035 *

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