2017-10-25 28 views
-2

私はmongoコレクションを持っています。今では、ユーザは、自分のニーズに基づいて、任意のフィールドまたはすべてのフィールドを使用して検索することができます。mongodbの複数のフィールドを検索

例: - ユーザーは、属性のいずれか1つ、または2つの属性、またはコレクションに存在するフィールドを覚えている任意の数の属性を使用して検索できます。どのオペレーターかオペレーターの組み合わせを使用するかを決定するのに役立ちますか?

{"_id":1, "field1":"hi","field2":"bye","field3":"bro", "field4":"stuff"}, 
{"_id":2, "field1": "hello", "field2": "back", "field3": "fat", "field4":"cat"}, 
{"_id":3, "field1": "some", "random": "foo", "stuff": "bar", "field4":"help"} 

答えて

0

のMongoDBでは、あなたはand/or句でクエリを行うことができます。例えば

db.collection.find({ $or: [ { field1: "hi" }, { field1: "hello" } ] }) 
0

ユーザーが$orの周りを検索することができますことを、あなたのパラメータをラップする必要があると思います。次に、検索できるフィールドはすべて$in演算子を使用する必要があります。

db.getCollection('collection').find({ 
    $or: [ 
    {field1: {$in: ["hi", "hello", "some"]}}, 
    {field2: {$in: ["bye", "back", "some"]}}, 
    {field3: {$in: ["bye", "back", "some"]}}, 
    // etc. add your other fields as well here 
    ] 
}) 
2

ここに行く -

db.test.find({ 
$or:[ 
    { 
     $and: [ 
       {'stocknumber':12346}, 
       {'model':'bmx'}, 
       {'make':2002}, 
       {'rego':'KA01HG6268'}, 
       {'adate':'2017-10-01T05:07:10.969Z'}, 
       {'cdate':'2017-10-01T05:07:10.969Z'} 
      ] 
    }, 
    { 
     $and: [ 
       {'stocknumber':12347}, 
       {'model':'bmy'}, 
       {'make':2003} 
      ] 

    } 
] 
}).pretty() 

あなたは今までに組み合わせ、ユーザが覚えているいずれかのクエリを実行してみましょう傘演算子、各クエリとして上記の例では$or行為を$and$orの組み合わせを使用することができます$and演算子が含まれており、ユーザーが覚えているフィールドの組み合わせを作成するのに役立ちます。これは長いクエリになりますが、多くの場合、ヌルチェックと文字列操作が多くなります。最悪の場合、それはフィールド数と両方のオペレータのデカルト積である。お役に立てれば。

関連する問題