Mongoid возвращает Specifi c объект из массива в документе - PullRequest
0 голосов
/ 19 апреля 2020

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

Предположим, у меня есть простой документ, который выглядит следующим образом:

{
  data: [
    {
      name: "Minnesota",
    },
    {
      name: "Mississippi",
    },
    ...
  ]
}

Если я выполню следующий запрос в моей оболочке Mon go, все будет работать так, как я ожидал:

db.collection.find({}, {data: {$elemMatch: {name: "Michigan"}}})

Возвращает:

{ "_id" : ObjectId("5e9ba60998d1ff88be83fffe"), "data" : [ { "name" : "Michigan" } ] }

Однако, используя mongoid попытка выполнить подобный запрос возвращает каждый объект внутри массива данных. Вот один из майских запросов, которые я пробовал:

Model.where({data: {"$elemMatch": {name: "Michigan"}}}).first

Как я уже упоминал выше, этот маленький запрос возвращает все, что находится внутри массива данных, а не конкретный c объект, который я пытаюсь извлечь документа.

Любая помощь будет оценена. Я стараюсь не возвращать результаты и не обрабатывать их с помощью Ruby. Я хотел бы справиться с этим на уровне БД.

Спасибо.

Ответы [ 2 ]

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

Ранее был очень похожий вопрос для другого драйвера. Очевидно, драйвер ruby ведет себя не так, как оболочка.

Попробуйте выполнить поиск как эквивалентную команду базы данных:

session.command({'find' => 'my_collection', 'filter' => {}, projection => {data: {$elemMatch: {name: "Michigan"}}}})
0 голосов
/ 19 апреля 2020

Монгойный синтаксис для проекций: только .

...