У меня есть документы, подобные этому в коллекции x
в MongoDB:запросов для документов, которые имеют внутренний суб-поле при заданном значении
{
"_id" : ...
"attrKeys": [ "A1", "A2" ],
"attrs" : {
"A1" : {
"type" : "T1",
"value" : "13"
},
"A2" : {
"type" : "T2",
"value" : "14"
}
}
}
A1
и A2
элементы Выше приведены лишь Примеры: attrs
поля могут удерживайте любое количество ключей любого имени. Имена ключей в attrs
хранятся в поле attrNames
.
Я хотел бы запросить документы, имеющие attr
с подполем заданного значения. Например, запрос для документов, которые имеют элемент в ключевой карте attr
, подполем type
является «T4». Что-то вроде этого:
db.x.find({"attrs.$any.type": "T4"})
(avobe не юридический язык MongoDB запрос, но я думаю, что это может помочь, чтобы получить представление).
Этот вопрос возможен с MongoDB? Существует ли какое-либо обходное решение в случае, если MongoDB не поддерживает этот запрос? Благодаря!
EDIT: оригинальные версии модели данных используют массив для attrs
вместо ключевой карты. Однако это изменилось в пользу ключевой карты, чтобы допускать одновременные изменения в том же документе.
Я имею в виду, что с помощью карты ключей два независимых клиента могут изменять элементы attrs
, поскольку один клиент может делать db.x.update({_id: "y"}, {$set: { "attrs.A1.value": "12" } }
, а другой клиент делает db.x.update({_id: "y"}, {$set: { "attrs.A2.value": "55" } }
, не вмешиваясь друг в друга.
В случае использования параллельного доступа к массиву намного сложнее. Любой намек на то, как это можно сделать?
Относительно «Любой намек на то, как [параллельный доступ с использованием массивов] может быть выполнен?» Я могу задать отдельный вопрос, если сообщество лучше подумает. – fgalan
Как вы считаете, проблема с одновременным доступом здесь? объясните, почему вы думаете, что массив вызывает проблемы. –
У меня есть проблема в отдельном вопросе http://stackoverflow.com/questions/31643054/concurrent-update-of-array-elements-which-are-embedded-documents-in-mongodb. Спасибо за вашу помощь! – fgalan