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

Mongooseでは、Model.find()とModel.find()。exec()は同じ結果を生成します。では、なぜModel.find()。exec()をわざわざ使用するのでしょうか。

    マングースは、promisesで両方の違いを説明しています

    例:

    const doc = await Band.find({ name: "Guns N' Roses" }); // works
    
    const badId = 'this is not a valid id';
    try {
      await Band.find({ _id: badId });
    } catch (err) {
      // Without `exec()`, the stack trace does **not** include the
      // calling code. Below is the stack trace:
      //
      // CastError: Cast to ObjectId failed for value "this is not a valid id" at path "_id" for model "band-promises"
      //   at new CastError (/app/node_modules/mongoose/lib/error/cast.js:29:11)
      //   at model.Query.exec (/app/node_modules/mongoose/lib/query.js:4331:21)
      //   at model.Query.Query.then (/app/node_modules/mongoose/lib/query.js:4423:15)
      //   at process._tickCallback (internal/process/next_tick.js:68:7)
      err.stack;
    }
    
    try {
      await Band.find({ _id: badId }).exec();
    } catch (err) {
      // With `exec()`, the stack trace includes where in your code you
      // called `exec()`. Below is the stack trace:
      //
      // CastError: Cast to ObjectId failed for value "this is not a valid id" at path "_id" for model "band-promises"
      //   at new CastError (/app/node_modules/mongoose/lib/error/cast.js:29:11)
      //   at model.Query.exec (/app/node_modules/mongoose/lib/query.js:4331:21)
      //   at Context.<anonymous> (/app/test/index.test.js:138:42)
      //   at process._tickCallback (internal/process/next_tick.js:68:7)
      err.stack;
    }
    

    その他:クエリは約束ではありません

    const query = Band.find({name: "Guns N' Roses"});
    assert.ok(!(query instanceof Promise));
    
    // A query is not a fully-fledged promise, but it does have a `.then()`.
    query.then(function (docs) {
      // use docs
    });
    
    // `.exec()` gives you a fully-fledged promise
    const promise = query.exec();
    assert.ok(promise instanceof Promise);
    
    promise.then(function (docs) {
      // use docs
    });
    



    1. Express.jsとconnect-mongoセッションの継続時間

    2. Mongoでサブドキュメントを整理する最良の方法は?

    3. MongoDBサービスがFedoraで実行されていません

    4. フィールド値によるハッシュのRedis検索