запрос mongodb для нахождения отличного значения в массиве - PullRequest
0 голосов
/ 01 ноября 2018

Создан сборник для массива «тест»

({a:"foo", b:[10,20,30]}) 
({a:"foo", b:[15,25,35]}) 
({a:"foo", b:[10,40,50]}) 
({a:"bar", b:[10,60,70]}) 

Запрос MongoDB, чтобы найти все документы, которые имеют различные значения и значение b как «10».

Я пробовал это

db.test.find({b: {$elemMatch : {$in : [10] }}})

{ "_id" : ObjectId("5bda7ea8aabd746c974b5faa"), "a" : "foo", "b" : [ 10, 20, 30 ] }
{ "_id" : ObjectId("5bda7f74aabd746c974b5fac"), "a" : "foo", "b" : [ 10, 40, 50 ] }
{ "_id" : ObjectId("5bda7f74aabd746c974b5fad"), "a" : "bar", "b" : [ 10, 60, 70 ] }

это дает вывод второго, как получить отличное значение?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я получил свой ответ.

db.test.distinct( "a" , {b: {$elemMatch : {$in : [10] }}})

Выход:

[ "foo", "bar" ]
0 голосов
/ 01 ноября 2018
db.collection.aggregate([{
    $unwind: "$b"
  },
  {
    $group: {
      _id: "$b",
      a_vals: {
        $addToSet: "$a"
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $match: {
      count: {
        $gt: 1
      }
    }
  }
]);

Ссылка на игровую площадку: https://mongoplayground.net/p/qR2mTqXPs3o

...