2013-07-26 1 views
1

Мне нужен эффективный способ найти все документы в коллекции, где их свойства являются подмножеством переданных свойств объекта.Эффективный способ в MongoDB найти, где свойства docments соответствуют подмножеству чужих

Пример:

PassedObject: { 
    name: "Joe", 
    age: 55, 
    sex: "male" 
} 

collection: [ 
    one: { 
     age: 55 
    }, 
    two: { 
     sex: "male", 
     age: 18 
    }, 
    three: { 
     sex: "male", 
     age: 55 
    }, 
    four: { 
     sex: "female", 
     age: 22 
    }, 
    five: { 
     make: "LG", 
     model: "24EN43" 
    } 
] 

совпавших записей будет один и три. Я придумал способ сделать это, используя $ors внутри $ands, проверяя, не было ли свойство либо не было или было равно значению, но это было медленным, а также создавали ложные срабатывания (например, документ пять (make: LG) будет возвращен).

ответ

0

Следующий код будет делать трюк

db.searchTest.find({$and:[{$or:[{name:{$exists:false}},{name:"Joe"}]},{$or:[{age:{$exists:false}},{age:55}]},{$or:[{sex:{$exists:false}},{sex:"male"}]},{$or:[{name:{$exists:true}},{age:{$exists:true}},{sex:{$exists:true}}]}]}) 

Чтобы сделать это эффективно, вам нужно построить соответствующие индексы на данных