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

Как да върна само вложените документи на масив от всички документи

Можете да направите това с помощта на .aggregate() и предимно $unwind оператор на тръбопровода:

В съвременния MongoDB 3.4 и по-нова версия можете да използвате в тандем с $replaceRoot

Model.aggregate([
  { "$unwind": "$books" },
  { "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {

})

В по-ранни версии указвате всички полета с $project :

Model.aggregate([
  { "$unwind": "$books" },
  { "$project": {
    "_id": "$books._id",
    "pages": "$books.pages",
    "title": "$books.title"
  }}
],function(err,results) {

})

Така че $unwind е това, което използвате за деконструиране или "денормализиране" на записите в масива за обработка. На практика това създава копие на целия документ за всеки член на масива.

Останалата част от задачата е за връщане "само" на тези полета, присъстващи в масива.

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

Много по-добре е за производителност, отделяйки всички документи от колекция с рамката за агрегиране, само за да изброите тези документи само от масива.



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

  2. Запитване с мангуста и дати

  3. Как мога да направя заявка за mongodb с помощта на mongoid/rails без изтичане на времето?

  4. Как да създадете и предадете bson документ - Go lang?

  5. GSSException:Не са предоставени валидни идентификационни данни (ниво на механизма:Неуспешно намиране на Kerberos tgt)