MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wybierz rekordy pasujące do wartości concat dwóch pól w mongodb

Możesz to zrobić tylko za pomocą frameworka agregacji, a nie zwykłego wyszukiwania.

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

Zwróć uwagę, że nie będzie można używać żadnych indeksów, ponieważ nie ma obsługi indeksów dla obliczonych wartości w MongoDB (jeszcze).

Jeśli masz indeks w field1 i wiesz, ile znaków spodziewasz się, że pole 1 wniesie wkład w value możesz poprawić wydajność tej agregacji w ten sposób:

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

gdzie val jest pierwszą częścią ciągu „wartość” (nie wolno porównywać więcej znaków niż najkrótsza możliwa wartość field1 chociaż.

EDYTUJ od wersji 3.6 możesz to zrobić w find za pomocą $expr wyrażenie:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zainstalować i skonfigurować MongoDB na Ubuntu?

  2. Jak znaleźć losowy rekord w Mongoose?

  3. Przegląd narzędzia MongoDB Database Profiler

  4. Co to jest TransientTransactionError w Mongoose (lub MongoDB)?

  5. C# + MongoDB — ObjectId bez użycia MongoDB DataTypes/Attributes