1

プロパティが渡されたオブジェクトのプロパティのサブセットであるコレクション内のすべてのドキュメントを効率的に検索する方法が必要です。

例:

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"
    }
]

一致するレコードは 1 と 3 です。$orsの内部を使用してこれを行う方法を思いつき$ands、プロパティが存在しないか、値と等しいかどうかを確認しましたが、これは遅く、誤検知も発生しました (たとえば、ドキュメント 5(make: LG) は返されます)。

4

1 に答える 1

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}}]}]})

これを効率的にするには、データに適切なインデックスを作成する必要があります

于 2013-09-06T19:16:29.753 に答える