MongoDB :: Почему индексы встроенных документов не возвращают документы в обратном порядке? - PullRequest
0 голосов
/ 14 июня 2011

Это из документов MongoDB :

db.factories.insert( { name: "xyz", metro: { city: "New York", state: "NY" } } );
db.factories.ensureIndex( { metro : 1 } );
// this query can use the above index:
db.factories.find( { metro: { city: "New York", state: "NY" } } );
//As well as this
db.factories.find( { metro: { $gte : { city: "New York" } } } );

// But this query will not return the document because the order of the fields is significant and doesn't match in this case
db.factories.find( { metro: { state: "NY" , city: "New York" } } );

Почему порядок документов значим?

1 Ответ

2 голосов
/ 14 июня 2011

Потому что в JSON и BSON порядок полей имеет значение при сериализации.Т.е.

{ city: "New York", state: "NY" }

- это не то же самое, что

{ state: "NY" , city: "New York" }

Фактически индексируемым значением будет «New YorkNY» в первом случае и «NYNew York» во втором (примерно),Поскольку нет никакой схемы, позволяющей нормализовать порядок полей перед поиском во встроенном документе в индексе.

Чтобы преодолеть это, вы можете использовать составной индекс:

db.factories.ensureIndex( { "metro.city": 1, "metro.state": 1 })

и выполнить запрос с (здесь порядокне имеет значения):

db.factories.find( { "metro.city": "New York", "metro.state": "NY" } )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...