2016-06-15 3 views
1

Как найти документ, содержащий данный объект JSON?Запросить документы в MongoDB путем сопоставления объектов

Пример:

предположить, что в базе данных test есть документ, как это:

{ 
    "identification": { 
    "componentId": "3a4f6199-6141-4179-ac5f-f1bbcf627bb2", 
    "componentType": "PivotTable", 
    "dataDate": "2016-06-15T15:29:51.139+0200", 
    "dataType": "PTF", 
    "properties": { 
     "contextId": "0329fe70-92f0-4b60-b3c2-79377adb8f95", 
     "tags": ["tag1", "tag2"] 
    } 
    }, 
    "viewData": { 
    "lineGroups": [] 
    } 
} 

Теперь дается только identification часть документа с частичным набором ключей со значением:

{ 
    "componentType": "PivotTable", 
    "properties": { 
     "tags": ["tag1"] 
    } 
} 

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

Если я делаю db.test.find({identification: {/*the given identification segment*/}}), mongodb будет сравнивать непосредственно идентификационную часть, проверяя точно каждую запись в документе. В этом случае этот документ не будет возвращен.

Есть ли способ в языке запросов mongodb, который позволяет мне делать это относительно прямым или простым способом? Или я должен разбирать записи в объекте идентификации рекурсивно, чтобы построить запрос?

ответ

0

Mongo попытается сопоставить ВОДНЫЕ ДОКУМЕНТЫ свойств, , поэтому в этом случае нам нужно будет предоставить документ 1: 1.

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

{ 
    "componentType": "PivotTable", 
    "properties.tags": {$in:["tag1"]}  
} 
+0

Таким образом, мне еще нужно построить строку запроса, проанализировав записи в поддокументе. Не более простой способ? Поскольку, когда структура поддокумента становится сложной (содержащей другой поддокумент с разными типами значений), построение запроса становится не таким простым. – qingl97

+0

да ..... это игра :-) – profesor79

+0

@ qingl97 Если мой ответ помог вам, пожалуйста, примите его, см. Это: http://stackoverflow.com/help/accepted-answer – profesor79

Смежные вопросы