sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB sök efter varje dikt i listan i samlingen

Även om det nämns att $and operator krävs inte, i någon av formerna är detta inte den fråga du vill ha. Tänk på följande:

db.user.find_one({ 'names.firstName': 'alice','names.lastName': 'jones' })

Detta gör faktiskt matcha den givna posten eftersom det finns båda element med "firstName" lika med "alice" och "lastName" värden lika med "jones". Men naturligtvis är problemet här enkelt i det att det inte finns något egentligt element i arrayen som har ett underdokument för båda dessa värden.

För att matcha där ett arrayelement innehåller "båda" de angivna kriterierna måste du använda $elemMatch operatör. Detta tillämpar frågevillkoret på "elementen" i arrayen.

db.user.find_one({ 
    'names': { '$elemMatch': { 'firstName': 'alice','lastName': 'smith' }
})

Och naturligtvis om du försökte "alice" och "jones" så skulle det inte matcha eftersom inget element faktiskt innehåller den operationen.



  1. Installerar du PHP 7 MongoDB-klienten/drivrutinen?

  2. Autentiseringsfel vid försök att spara till mongodb

  3. MongoDB-fråga för dokument äldre än 30 sekunder

  4. Django, Redis:Var ska man lägga anslutningskoden