Запрос документов с вложенным массивом в mongoDB - PullRequest
0 голосов
/ 29 апреля 2020

РЕДАКТИРОВАТЬ : ниже был выполнен запрос из DataGrip, версия mongodb 4.2.6

Я довольно новичок в mongoDB и копаю много документов, но не могу понять, как эта работа.

Мои коллекции такие:

db.cards.insertMany([
{
  "Name": "SingleFaced Card",
  "Face": [
    {"Type": "Front", "Color": ["Black"]},
  ]
},
{
  "Name": "DoubleFaced Card",
  "Face": [
    {"Type": "Front", "Color": ["Black"]},
    {"Type": "Back", "Color": ["Red", "Yellow"]}
  ]
},
]);

Я хотел бы запросить карту, у которой есть хотя бы одно лицо с данным цветом, скажем Red.

Я испробовал множество различных опций, все они дают мне счет 0.

db.cards.count({"Face.Color": "Red"}); // 0 record
db.cards.count({"Face.Color": ["Red"]}) // 0 record
db.cards.count({"Face.Color": {$elemMatch:{$in:['Red']}}}) // 0 record
db.cards.count({"Face.Color": {$elemMatch:{$all:['Red']}}}) // 0 record
db.cards.count({"Face.Color": {$elemMatch:{$elemMatch:{$in:['Red']}}}}); // 0 record

Сначала я думал, что что-то не так с моей установкой, но ниже работали запросы на вложенные поля .

db.cards.count({"Face.Type" : "Front"}); // 2 record
db.cards.count({"Face.Type" : "Back"}); // 1 record

Есть предложения, как мне сделать эту работу? Я здесь использую неправильный выбор дизайна?

1 Ответ

2 голосов
/ 29 апреля 2020

Ваш третий запрос уже работает

db.cards.count({ "Face.Color": { $elemMatch: { $in: ['Red'] } } }) 
...