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

Opcja projekcji do zwrócenia długości/rozmiaru pola

.find() w żaden sposób nie "zmienia" zwracanych dokumentów. W projekcji możesz tylko „włączyć” lub „wykluczyć”.

Jedyne, co "zmienia" to .aggregate() lub .mapReduce() .

Dla .aggregate() , wymaga MongoDB 3.4 dla $strLenCP lub $strLenBytes , ale zwykle masz na myśli to pierwsze:

db.documents.aggregate([
  { "$project": {
    "bodyLength": { "$strLenCP": "$body" }
  }}
])

Dla .mapReduce()

db.documents.mapReduce(
  function() {
    emit(this._id, this.body.length)
  },
  function() { },
  { "out": { "inline": 1 } }
);

Realistycznie rzecz biorąc, w tym drugim przypadku możesz równie dobrze iterować kursor i może być to konieczne, chyba że kolekcja jest wystarczająco mała lub zamiast tego możesz wyświetlić inną kolekcję.

$size Operator, którego próbujesz użyć, dotyczy tylko "tablic", aby zwrócić liczbę obecnych wpisów. I znowu, jest to ważne tylko do użycia z .aggregate() metoda.

Jeśli chcesz pominąć znaki takie jak space w ciągu, a następnie $split i $reduce z $concat można zastosować:

db.documents.aggregate([
  { "$addFields": {
    "bodyLength": {
      "$strLenCP": {
        "$reduce": {
          "input": { "$split": [ "$name", " "] },
          "initialValue": "",
          "in": { "$concat": [ "$$value", "$$this" ] }
        }
      }
    }
  }}
])

Lub ponownie za pomocą mapReduce() :

db.documents.mapReduce(
  function() {
    emit(this._id, "".concat.apply(this.body.split(" ")).length)
    // Or even
    // emit(this._id, this.body.split(" ").reduce((o,e) => o.concat(e),"").length)
  },
  function() { },
  { "out": { "inline": 1 } }
);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb dołącza do wielu kolekcji

  2. Jak agregować dane według każdego dnia, tygodnia, miesiąca w odpowiednim tygodniu, miesiącu, roku odpowiednio w mongodb

  3. Jak zarządzać połączeniami MongoDB w aplikacji internetowej Node.js?

  4. MongoDB c# sterownik:bez rozróżniania wielkości liter Porównaj używając in lub zawiera na liście używając linq

  5. Mongo UUID Wpisz 03 zamiast 04 z powłoki mongo