mongodb находит по нескольким элементам массива

97

Если у меня есть такая запись;

{
  "text": "text goes here",
  "words": ["text", "goes", "here"]
}

Как я могу сопоставить несколько слов из него в MongoDB? При сопоставлении одного слова я могу это сделать;

db.find({ words: "text" })

Но когда я пробую это для нескольких слов, это не работает;

db.find({ words: ["text", "here"] })

Я предполагаю, что, используя массив, он пытается сопоставить весь массив с массивом в записи, а не сопоставить отдельное содержимое.

Стивен Белэнджер
источник

Ответы:

169

Зависит от того, пытаетесь ли вы найти документы, wordsсодержащие оба элемента ( textи here), используя $all:

db.things.find({ words: { $all: ["text", "here"] }});

или любой из них ( textили here) используя $in:

db.things.find({ words: { $in: ["text", "here"] }});
Абдель Хади
источник
3
Это тоже помогло мне, мне нужно было найти идентификатор объекта в массиве, и где что-то вроде $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] не удалось, $ in: ["4f9f2c336b810d0cf0000017"] сработало
jbnunn
вы также можете найти другой способ сделать это на странице поддержки mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents и docs.mongodb.org/manual/core/indexes/#multikey-indexes
Вивек Баджпай
1
Это лучше, чем зацикливать массив и выполнять одиночный find ()?
Рохит Наир,