sql >> Database >  >> NoSQL >> MongoDB

Selecteer records die overeenkomen met de concat-waarde van twee velden in mongodb

Je kunt het alleen doen met een aggregatieraamwerk, niet met regelmatig zoeken.

db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

Merk op dat dit geen indexen kan gebruiken, aangezien er (nog) geen ondersteuning is voor indexen op berekende waarden in MongoDB.

Als je een index hebt op field1 en u weet hoeveel tekens u verwacht dat veld1 bijdraagt ​​aan value u kunt de prestaties van deze aggregatie als volgt verbeteren:

db.coll.aggregate({$match:{field1:/^val/}},
                  {$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

waar val is het eerste deel van de tekenreeks "waarde" (u mag niet meer tekens vergelijken dan de kortst mogelijke waarde van field1 hoewel.

BEWERKEN vanaf versie 3.6 kun je dit doen in find met behulp van de $expr uitdrukking:

db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})


  1. Is er een manier om een ​​cluster door te spoelen, zodat alle sleutels van master en slaves uit de db worden verwijderd?

  2. Hoe alle velden in een subdocument van MongoDB optellen?

  3. MongoDB:Hoe werk ik een enkel subelement in een array bij, waarnaar wordt verwezen door de index in de array?

  4. Wat is het nut van Jade of Handlebars bij het schrijven van AngularJs-apps?