#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
Итак, у меня есть коллекция документов, которая выглядит так :
{
"slug": {
"fr-FR": "test-1",
"nl-NL": "test-2",
"en-US": "test-3"
}
}
В моем приложении мне нужно проверить, используется ли пуля в каких-либо документах (каждый пуля должен быть глобально уникальным, а не только в их локали).
На данный момент мне нужно выполнить такой большой запрос :
.findOne({
$or: [
{ "slug.fr-FR": "test-1" },
{ "slug.nl-NL": "test-1" },
{ "slug.en-US": "test-1" }
]
})
Итак, мне было интересно, есть ли какое-либо решение для сокращения этого запроса с использованием подстановочных знаков.
Я надеюсь, что все это имеет смысл для вас!
Спасибо
Ответ №1:
Используя функцию Javascript(), вы можете избежать отдельных операторов сопоставления:
db.collection.find(function(){
for ( var k in this.slug ) {
if ( this.slug[k] == "test-1" )
return true;
}
})
Комментарии:
1. Я думал об этом решении, однако мне было интересно, возможно ли это только с использованием объекта, но спасибо за ответ
2.MongoDB не имеет поддержки подстановочных знаков в index / query. ie. вы не можете сделать что-то вроде
.findOne("slug.*" : "test-1")
jira.mongodb.org/browse/SERVER-267