MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy w Mongo można dostać kawałek plasterka?

Musisz użyć potoku agregacji, aby uzyskać $slice łańcucha, ze względu na ograniczenia w oświadczeniu projektu będącym częścią zapytania find.

Poniższe zapytanie jest nieprawidłowe, ponieważ pierwszy $slice zwróci tablicę zamiast indeksu i wykonanie zewnętrznego $slice nie powiedzie się.

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

Co więcej, nie ma możliwości pracy nad rzutowanym polem w tym samym oświadczeniu projektu, jeśli to możliwe, moglibyśmy dalej modyfikować tekst, stosując do niego $slice.

Droga do zrobienia to:

  • Match rekord z nazwą foo.
  • Unwind tablicę tekstową, aby dostać się na pierwszy poziom.
  • Unwind ponownie, aby osiągnąć pożądany poziom.
  • Group rekordy razem według nazwy.
  • Project ostatni rekord w grupie, który jest również ostatnim elementem ostatniej zagnieżdżonej tablicy.

Kodeks:

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

lub jeśli chcesz zaprojektować element pojawiający się w określonej kolejności, możesz użyć $skip i $limit operacji, aby to osiągnąć.

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

Który rzutuje drugi element w kolejności w zagnieżdżonych tablicach.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wykonać addToSet za pomocą oficjalnego sterownika Go?

  2. Mongo sortuj według pola dynamicznego

  3. Zapytanie o metadane MongoDB GridFS (Java)

  4. Znajdowanie pierwszych N wpisów z tablicy

  5. MongoDB - Użyj struktury agregacji lub mapreduce do dopasowania tablicy ciągów w dokumentach (dopasowanie profilu)