Подстановочный знак MongoDB в ключе запроса - PullRequest
31 голосов
/ 30 мая 2011

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

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

1 Ответ

11 голосов
/ 31 мая 2011

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

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

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

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

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

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

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

...