sql >> データベース >  >> NoSQL >> MongoDB

フィールドの長さ/サイズを返す投影オプション

    .find() 返されたドキュメントを「変更」することはありません。投影に「含める」または「除外する」ことしかできません。

    「変更」するのは、 .aggregate() または .mapReduce()

    .aggregate()の場合 、 $strLenCPにはMongoDB3.4が必要です または $strLenBytes 、しかし通常は前者を意味します:

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

    .mapReduce()の場合

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

    後者の場合、現実的には、カーソルを繰り返し処理することもできます。コレクションが十分に小さいか、実際に別のコレクションに出力できる場合を除いて、カーソルを繰り返す必要があります。

    $size 使用しようとしている演算子は、存在するエントリの数を返す「配列」にのみ適用されます。繰り返しになりますが、これは.aggregate()での使用にのみ有効です。 メソッド。

    spaceなどの文字を省略する場合 文字列内で、 $split および $reduce $concat 適用可能:

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

    または、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. 各グループの最後の真の値を返します

    2. Hiveを使用したHBaseとの対話、パート1

    3. Mongoose:mpromise(mongooseのデフォルトのpromiseライブラリ)は非推奨になりました

    4. mongodbnodejs-循環構造の変換