Ассоциативный массив в ключах CouchDB? - PullRequest
1 голос
/ 29 сентября 2011

Я не видел никаких упоминаний об этом, но есть ли способ справиться с ключом ассоциативного массива в CouchDB?:

map: function(doc) { if (...) { emit({ one: doc.one, two: doc.two, ... }); } }

Мне нужны некоторые довольно динамичные и сложные запросы, это помогло бы решить эту проблему (но я предполагаю, что это полностью ломает все).

1 Ответ

3 голосов
/ 30 сентября 2011

Все ключи всегда отсортированы только по одному измерению.Ключи ассоциативного массива (объекта) поддерживаются CouchDB.Порядок сортировки четко определен, однако он в основном произвольный и гораздо менее интуитивно понятен, чем, например, массивы, где мы все знаем, что первый / самый левый элемент является наиболее значимым.

Кроме того, разные языки программирования,клиентские библиотеки и сериализаторы JSON могут (и делают!) изменять порядок ключей в ассоциативном массиве.(Часто это не имеет значения, потому что в Javascript или в большинстве языков порядок ключей не определен.)

Спецификация сопоставления CouchDB описывает порядок сортировки всехдопустимые данные JSON, включая ассоциативные массивы (объекты).

Может быть, вы можете моделировать ассоциативные массивы, сгруппировав их в массив и отсортировав ключи, все на стороне клиента.

{"foo":"This value is foo", "A":65, "the":"end"}

становится

["A", 65, "foo", "This value is foo", "the", "end"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...