Поиск наличия строки в нескольких массивах документа в mon go db - PullRequest
0 голосов
/ 05 марта 2020

Я хочу сделать запрос, в котором я бы сейчас указывал _id и название страны, в результате я хочу найти значение true или false, если данная страна присутствует в этих трех массивах или нет. Если присутствует, то true вместо false. Например, у меня есть страна: Франция и _id: 5e4d18bd10e5482eb623c6e4 , тогда результат будет-

country_array_1: true, country_array_2: true, country_array_3: false

Я хочу запрос mon go дБ для этого типа ввода и вывода. Я могу быть агрегированным или найти только один, но мне нужен мой ответ

 0  _id:5e4d18bd10e5482eb623c6e4
       country_array_1:['France','Italy','China'],
       country_array_2:['Finland','England','France']
       country_array_3:['USA','turkey','India']

 1  _id:5e4345bd10e5482eb62E4X11f
       country_array_1:['Srilanka','Malaysia','Pakistan'],
       country_array_2:['Egypt','Austria','Netherland']
       country_array_3:['Mexico','turkey','India']

Я хочу сделать запрос в который я бы дал как

[Input]
 _id:5e4d18bd10e5482eb623c6e4,
 country:'France'

[Output]
 country_array_1:true,
 country_array_2:true,
 country_array_3:false

1 Ответ

2 голосов
/ 05 марта 2020

Агрегационный трубопровод

db.test.aggregate([
  { $match: { _id: ObjectId("5e4d18bd10e5482eb623c6e4") } },
  {
    $project: {
      country_array_1: {
        $in: ["France", "$country_array_1"]
      },
      country_array_2: {
        $in: ["France", "$country_array_2"]
      },
      country_array_3: {
        $in: ["France", "$country_array_3"]
      }
    }
  }
]);

Выход:

{
    "_id" : ObjectId("5e4d18bd10e5482eb623c6e4"),
    "country_array_1" : false,
    "country_array_2" : true,
    "country_array_3" : false
}
...