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

Mongo Query на множество полета на поддокумент

Това всъщност е, което $elemMatch операторът е за, въпреки че често се злоупотребява. По същество той изпълнява условията на заявката за всеки елемент "в" масива. Всички аргументи на MongoDB са операция "и", освен ако изрично не са извикани по друг начин:

db.collection.find({ "arr": { "$elemMatch": { "name": "b", "num": 2  } } })

Вероятно също искате да „проектирате“ и тук, ако очаквате само съответстващото поле, а не целия документ:

db.collection.find(
    { "arr": { "$elemMatch": { "name": "b", "num": 2  } } },
    { "arr.$": 1 }
)

И накрая, за да обясните защо вторият ви опит не работи, тази заявка:

db.collection.find({
    "arr": [
        { "name": "b", "num": 2 }
    ]
})

Не съответства на нищо, тъй като няма действителен документ, в който „arr“ съдържа единствен елемент, който точно отговаря на вашите условия.

Първият ви пример е неуспешен..:

db.collection.find({
    $and: [
        { "arr.name": "b" },
        { "arr.num": 2 }
    ]
});

Тъй като има няколко елемента на масива, които отговарят на условията и това не се счита само за това, че и двете условия се прилагат за един и същи елемент. Това е $elemMatch добавя и когато имате нужда от повече от едно условие за съвпадение, тогава това е мястото, където го използвате.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да десериализирате обект на BsonDocument обратно в клас

  2. Mongoose ODM:NumberInt не е дефиниран

  3. setDate не задава правилно дата в eval в партиден скрипт

  4. Показване само на съвпадащи полета за текстово търсене в MongoDB

  5. MongoDB $split