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

Mongodb изберете поле за връщане на вграден документ в масив

Да, но не както ти искаш. Ако направите следното, ще получите обратно само първия елемент от масива:

coll.find({_id:'2'}, { 'objects.0': 1})

Но това, което наистина искате, е нещо, което изглежда по следния начин:

coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})

Разбира се, това всъщност не работи в MongoDB.

Гледайки другия ви въпрос , това е една от причините да използвате "вградения обект" вместо "масива от обекти". С „вграден обект“ можете да направите следното:

coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object

Това ви позволява да изберете само "вградените обекти", от които се нуждаете.

Нещото с MongoDB е, че родителският документ е винаги извлечено. Заявките връщат документи от най-високо ниво. Това е вградено в цялата архитектура. Дори ако поискате само част от документа, сървърът пак трябва да зареди целия документ в паметта, преди да ви сервира исканата част.

Единственият начин за това може да бъде новата Aggregation Framework , но това все още не е в стабилния клон.



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

  2. Съвети за надграждане на Percona сървър за MongoDB

  3. Какво се случва, когато на mongodb липсва памет?

  4. Експортиране на данни от Mongo/Cassandra към HDFS с помощта на Apache Sqoop

  5. Групиране по специфичен елемент от масив с рамка за агрегиране mongo