sql >> Database teknologi >  >> NoSQL >> MongoDB

Inden for en mongodb $match, hvordan man tester for felt MATCHING, snarere end felt EQUALING

Det du ser i resultaterne er korrekt. Din tilgang er lidt forkert. Hvis du vil have de resultater, du forventer, skal du bruge denne tilgang:

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

Med dette skulle du få følgende output:

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

Hver gang du bruger aggregation i MongoDB og ønsker at skabe en aggregeringspipeline, der giver de dokumenter, du forventer, bør du altid starte din forespørgsel med den første fase. Og tilføje til sidst trin for at overvåge output fra efterfølgende trin.

Outputtet af din $unwind fase ville være:

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

Hvis vi nu inkluderer det tredje trin, som du brugte, så ville det matche for greetings nøgle, der har en værdi {hello:"world"} og med den nøjagtige værdi ville den kun finde to dokumenter i pipelinen. Så du ville kun få:

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



  1. Sideinddeling på array gemt i et dokumentfelt

  2. Couchbase benchmark afslører meget langsomme INSERT'er og GET'er (ved hjælp af KeyValue-operationer); langsommere end vedvarende MySQL-data

  3. MongoDB dump fra 3.2, gendan med 3.4, fejlindeks sikker =null

  4. Hvorfor skal jeg lukke eller holde Redis-forbindelser åbne?