MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Изберете записи, съответстващи на конкатна стойност на две полета в mongodb

Можете да го направите само с рамката за агрегиране, не и с редовното намиране.

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

Имайте предвид, че това няма да може да използва никакви индекси, тъй като няма поддръжка за индекси за изчислени стойности в MongoDB (все още).

Ако имате индекс на field1 и знаете колко знака очаквате поле1 да допринесе за value можете да подобрите производителността на това агрегиране по следния начин:

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

където val е първата част от низа "стойност" (не трябва да сравнявате повече знаци от най-кратката възможна стойност на field1 все пак.

РЕДАКТИРАНЕ от версия 3.6 можете да направите това в find с помощта на $expr израз:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose поддържа ли метода на Mongodb `findAndModify`?

  2. Как да наблюдавате MongoDB с Prometheus &ClusterControl

  3. Направете нещо, ако нищо не е намерено с .find() mongoose

  4. Мангуст (mongodb) партидна вложка?

  5. Как да преименувам полета при извършване на търсене/проекция в MongoDB?