2017-10-25 5 views
-2

Ich habe eine Mongo-Sammlung. Jetzt kann ein Benutzer unter Verwendung irgendeines Feldes oder aller Felder nach seinen Bedürfnissen suchen.Mehrere Felder in Mongodb suchen

Zum Beispiel: - Ein Benutzer kann mit einem Attribut oder zwei beliebigen Attributen oder einer beliebigen Anzahl von Attributen suchen, die er von den in der Sammlung vorhandenen Feldern merkt. Helfen Sie mir, zu entscheiden, welcher Betreiber oder welche Kombination von Bedienern ich verwenden soll?

{"_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"} 

Antwort

0

In MongoDB, können Sie Abfragen mit and/or Klauseln machen.

Zum Beispiel:

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

Sie müßten Ihre Parameter wickeln, dass der Benutzer suchen kann, um ein $or. Dann muss jedes Feld, nach dem gesucht werden kann, den Operator verwenden.

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

Hier gehen Sie -

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() 

Sie Kombination von $and und $or im obigen Beispiel $or fungiert als Dach Operator verwenden können, die Sie alle eine Abfrage ausführen lassen, die jemals Kombination Benutzer erinnert, jede Abfrage enthält einen Operator $and, der Ihnen hilft, Kombinationen von Feldern zu erstellen, die sich der Benutzer merken kann. Dies wird eine langwierige Abfrage, aber besser als eine Menge von Null-Checks und String-Manipulation. Im schlimmsten Fall wäre es ein kartesisches Produkt aus der Anzahl der Felder und sowohl der Operator. Hoffe das hilft.

Verwandte Themen