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

フィールドプロジェクションでbatchSizeフィールド名が無視されました

    ドライバーがこれをbatchSizeとして誤って解釈するのは正しいです オプションであり、射影ステートメントを無視します。

    最近のドライバーリリースでは、これを行う正しい方法は、実際に.project()を使用することです。 代わりに「カーソルメソッド」。これは、他の言語ドライバーの実装とより一貫性があります。

        db.collection('collection').find()
          .project({ name: 1, batchSize: 1})
          .toArray();
    

    完全なデモンストレーションとして:

    const mongodb = require('mongodb'),
          MongoClient = mongodb.MongoClient;
    
    
    (async function() {
    
      let db;
    
      try {
        db = await MongoClient.connect('mongodb://localhost/test');
    
        // New form uses .project() as a cursor method
        let result = await db.collection('collection').find()
          .project({ name: 1, batchSize: 1})
          .toArray();
    
        console.log(JSON.stringify(result,undefined,2));
    
        // Legacy form confuses this as being a legacy "cursor option"
        let other = await db.collection('collection')
          .find({},{ name: 1, batchSize: 1 })
          .toArray();
    
        console.log(JSON.stringify(other,undefined,2));
    
      } catch(e) {
        console.error(e)
      } finally {
        db.close()
      }
    
    })()
    

    出力を生成します:

    [
      {
        "_id": "594baf96256597ec035df23c",
        "name": "Batch 1",
        "batchSize": 30
      },
      {
        "_id": "594baf96256597ec035df234",
        "name": "Batch 2",
        "batchSize": 50
      }
    ]
    [
      {
        "_id": "594baf96256597ec035df23c",
        "name": "Batch 1",
        "batchSize": 30,
        "users": []
      },
      {
        "_id": "594baf96256597ec035df234",
        "name": "Batch 2",
        "batchSize": 50,
        "users": []
      }
    ]
    

    .project()を使用して、最初の出力フォームが修正されたフォームである場合



    1. Redisクラスターフェイルオーバー:スレーブはマスターになりません

    2. 'MongoMappingContext#setAutoIndexCreation(boolean)'を使用するか、' MongoConfigurationSupport#autoIndexCreation()'をオーバーライドして明示的にしてください

    3. HBaseとHive–より良い組み合わせ

    4. Mongooseコールバックに渡されるパラメーター