Как найти любое подполе в mongodb?

#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