Вам нужно будет построить запрос динамически, основываясь на свойствах объекта JavaScript.
Запрос было бы что-то вроде:
$and : [
{$or : [{ color: { $exists: true, $eq: 'blue' } }, {color: { $exists:false} }]},
{$or : [{ owner: { $exists: true, $eq: 'mike' } }, {owner: { $exists:false} }]},
...
// iterate through the other properties.
]
EDIT:
Используя $and
средство, которое документы в коллекции имеют свойство все они должны совпадать с object
- вы могли бы изменить к $or
, чтобы соответствовать любому из атрибутов.
EDIT 2
Также стоит учесть производительность будет беден для больших коллекций, если не использовать индексированные атрибуты в запросе. Одним из решений вашей проблемы будет использование массива и мультикидный индекс.
т.е.
{ tags : [ "color=blue","owner=mike" ] }
таким образом, вы можете использовать регулярные выражения \^color=\
вернуть все документы с классом = тега и использовать индекс. Вы также можете сделать \^color = blue \ для блюза.
Затем, чтобы выполнить несколько условий, вы должны использовать операторы $all
или $in
.
E.g.
{ tags : { $in: [/^color=blue/, /^owner=mike/]} }
Надежда, что помогает
что это объект представляет? возможные атрибуты в коллекции? – sambomartin
Объектом может быть любой объект json. Я хочу найти любые документы в коллекции, которые являются подмножествами объекта. – ngourley