Подтвердить что ты не робот

Обозначение MongoDB в ключе запроса

Можно ли подстановить ключ в запросе? Например, учитывая следующую запись, я хотел бы сделать .find({'a.*': 4}) Это обсуждалось здесь https://jira.mongodb.org/browse/SERVER-267, но похоже, что он не был разрешен.

{
  'a': {
    'b': [1, 2],
    'c': [3, 4]
  }
}
4b9b3361

Ответ 1

Как уже было сказано, это невозможно. Проблема с сервером, с которой вы связаны, по-прежнему находится под "проблемами, которые мы не уверены".

MongoDB имеет некоторый интеллект, окружающий использование массивов, и я думаю, что это часть сложности, связанной с такой функцией.

Возьмите следующий запрос db.foo.find({ 'a.b' : 4 } ). Этот запрос будет соответствовать следующим документам.

{ a: { b: 4 } }
{ a: [ { b: 4 } ] }

Итак, что здесь делает "подстановочный знак"? db.foo.find( { a.* : 4 } ) Соответствует ли он первому документу? Как насчет второго?

Кроме того, что это означает семантически? Как вы описали, запрос эффективно "находит документы, где любое поле в этом документе имеет значение 4". Это немного необычно.

Существует ли конкретная семантика, которую вы пытаетесь достичь? Возможно, изменение структуры документа предоставит вам нужный вам запрос.