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

Заявка за диапазон на MongoDB за цялата стойност на вградения документ

Обърнете внимание на командата няколко реда по-надолу в документацията, която сте свързали:

Това ви казва, че несъществуващите полета и полетата с нула се третират специално.

За документите {} и {a: null} за да бъде еквивалентен в реда на сортиране, алгоритъмът за сортиране трябва да счита, че липсващото поле за сортиране присъства и да има стойност null .

Ако изрично добавите липсващото поле, само за да видите как изглежда, подреждането има повече смисъл.

Филтърът {tag: { $gte: { baz: MinKey() }}} приложено към {_id: 1, tag: {bar: "BAR"}} по същество сравнява {baz: MinKey()} с {baz: null, bar: "BAR"} .

В горната част на документацията, която сте свързали, се посочва, че MinKey е по-малко от null , така че това е правилното подреждане.

РЕДАКТИРАНЕ

По принцип заявките са най-ефективни, когато самите имена на полета не са данни. От гледна точка на таблична база данни, коя колона ще съдържа "baz"?

Лека промяна в схемата би опростила този тип заявка. Вместо {tagname: tagvalue} , използвайте {k:tagname, v:tagvalue} . След това можете да индексирате tag.k и/или tag.v и заявка към tag.k за да намерите всички документи с таг "baz", маркерите за заявки с операции за неравенство ще работят по-интуитивно.

db.collection.find({"tag.k":{$gte:"baz"}})

Точните съвпадения могат да бъдат направени с elemMatch като

db.collection.find({tag: {$elemMatch:{k:"baz",v:"BAZ"}}})

Ако наистина имате нужда върнатите документи да съдържат {tagname: tagvalue} , $arrayToObject операторът за агрегиране може да направи това:

db.collection.aggregate([
  {$match: {
      "tag.k": {$gte: "baz"}
  }},
  {
    $addFields: {
      tag: {$arrayToObject: [["$tag"]]}
  }}
])

Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Обвивката на Mongo издава грешката Множество повторения на опция

  2. Изтриването на (издърпване) на документ в масив от Mongoose не работи с ObjectID

  3. Как да извлека правила за валидатор на колекция MongoDb?

  4. Разбиране на ограничението за размера на документа на MongoDB BSON

  5. Актуализиране на вложен масив Mongoose