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

В рамките на mongodb $match, как да тествате за поле MATCHING, а не за поле EQUALING

Това, което виждате в резултатите, е правилно. Подходът ти е малко грешен. Ако искате резултатите, които очаквате, тогава трябва да използвате този подход:

collection.aggregate([
  {$match:{greetings:{$elemMatch:query}}},
  {$unwind:"$greetings"},
  {$match:{"greetings.hello":"world"}},
]).toArray()

С това трябва да получите следния резултат:

[
  {greetings:{hello:"world"}},
  {greetings:{hello:"world"}},
  {greetings:{"hello":"world","extra":"data"}
]

Всеки път, когато използвате aggregation в MongoDB и искате да създадете конвейер за агрегиране, който дава документи, които очаквате, винаги трябва да започвате заявката си с първия етап. И след това евентуално добавете етапи, за да наблюдавате резултатите от следващите етапи.

Резултатът от вашия $unwind етап ще бъде:

[{
  greetings:{hello:"world"}
},
{
  greetings:{hello:"world", extra:"data"}
},
{
  greetings:{hello:"world"}
},
{
  greetings:{aloha:"mars"}
}]

Сега, ако включим третия етап, който сте използвали, тогава той ще съответства на greetings ключ, който има стойност {hello:"world"} и с тази точна стойност ще намери само два документа в процес на подготовка. Така ще получите само:

{ "greetings" : { "hello" : "world" } }
{ "greetings" : { "hello" : "world" } }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Трябва ли да затварям ръчно връзка с мангуста?

  2. Не може да се свърже с Mongo Atlas чрез VPC peering от GCP клъстер

  3. Java:Как да вмъкна hashmap в MongoDB?

  4. Mongoose не записва данни в MongoDB

  5. Node.js:Документ, който връща недефиниран - Mongoose