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

Възможно ли е да получите парче от парче в Mongo?

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

Заявката по-долу е невалидна, защото първият $slice ще върне масив, вместо индекс, и изпълнението на външния обхват $slice не успее.

db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})

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

Начинът, който трябва да направите, е:

  • Match записът с име като foo.
  • Unwind текстовия масив, за да стигнете до първото ниво.
  • Unwind отново, за да стигнем до нивото, което искаме.
  • Group записите заедно по име.
  • Project последният запис в групата, който е и последният елемент от последния вложен масив.

Кодът:

db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$group:{"_id":"$name","text":{$last:"$text"}}},
{$project:{"name":"$_id","text":1}}
])

или ако искате да проектирате елемент, появяващ се в определен ред, можете да използвате $skip и $limit операции за постигане на това.

var orderOfElement = 2;
db.collection.aggregate([
{$match:{"name":"foo"}},
{$unwind:"$text"},
{$unwind:"$text"},
{$skip:orderOfElement -1},
{$limit:1}
])

Което проектира втория по ред елемент във вложените масиви.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. проблеми с php7 mongo заявка findOne

  2. получаване на грешка ReplicaSetNoPrimary и MongoServerSelectionError при свързване на MongoDB с nodejs

  3. Външни ключове в монго?

  4. Какво да избера:MongoDB/Cassandra/Redis/CouchDB?

  5. Най-ефективният начин за получаване на цялата стойност за поле в MongoDB &Node.js