запрос mongodb внутри вложенного массива объектов - PullRequest
0 голосов
/ 22 мая 2018

У меня есть запись в коллекции, подобной этой:

{
   "overlaps": [
      {"BB1": "itemA", "iou": 0.1, "BB2": "itemB"},
      {"BB1": "itemB", "iou": 0.45, "BB2": "itemC"}
   ],
   "elemID": 1,
   "otherfield2": "whateverelse"
}

Я хочу найти записи, у которых есть элемент в массиве перекрытий, где перекрытия. BB1: "itemA" и перекрытия. BB2: "itemC",Но для того же элемента в массиве перекрытий.

Например, приведенный здесь пример не должен быть восстановлен, потому что у меня есть перекрытия. BB1: «itemA» и перекрытия. BB2: «itemC», но не в одном и том же элементе.

Допустимым элементом будет:

{
   "overlaps": [
      {"BB1": "itemA", "iou": 0.1, "BB2": "itemC"},
      {"BB1": "itemB", "iou": 0.45, "BB2": "itemC"}
   ],
   "elemID": 2,
   "otherfield2": "whateverelse"
}

Я пробовал это, но не работает

cursor = record1.find({"$and": [{"overlaps.BB1":"itemA"},{"overlaps.BB2":"itemC"}]}) 

Как я могу сделать эту работу?Или я должен изменить свою структуру данных, чтобы иметь возможность выполнять такие запросы?

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Вы должны использовать $elemMatch, чтобы получить результат

db.collection.find({
  overlaps: {
    $elemMatch: {
      BB1: "itemA",
      BB2: "itemC"
    }
  }
})
...