Предикаты массива MongoDB - PullRequest
       4

Предикаты массива MongoDB

1 голос
/ 06 апреля 2011

Мне было интересно, есть ли способ сделать сложный выбор. Учитывая следующую коллекцию документов:

{
  image = "cab"
  tags = [
            [ "NNP", 0 ],
            [ "NN", 1 ]
         ]
},
{
  image = "castle"
  tags = [
            [ "NNP", 2 ],
            [ "NN", 1 ],
            [ "VB", 0 ]
         ]
}, 
(etc)

Как бы я выразил запрос, который проверяет, содержит ли tags какой-либо элемент, например, ["NN", ?], где мне просто наплевать на целочисленную часть внутреннего массива? Обратите внимание, что внутренний массив неупорядочен, и целочисленные значения назначаются произвольно.

Обратите внимание, что я абсолютно новичок в mongodb, возможно, я упустил способ сделать это в документации. Однако я не смог успешно использовать $elemMatch: - (

1 Ответ

3 голосов
/ 06 апреля 2011

Я предлагаю немного другую схему:

{
  image = "cab"
  tags = [
            { name: "NNP", order: 0 },
            { name: "NN", order: 1 }
         ]
}

Существует три причины, по которым я предлагаю другую схему:

  1. Во-первых, вложение на двух уровнях обычно сложнее для запроса /update
  2. Массив в массиве тегов содержит элементы разных типов (int, string).
  3. Массив в массиве тегов выглядит как «объект тега» с двумя полями

С помощью приведенной выше схемы вы можете легко запросить теги с некоторым именем и порядком:

db.images.find({ "tags.name" : "NN", "tags.order" : 1 })

Обновление:

Точечная запись документация

Надеюсь, эта помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...