web-dev-qa-db-ja.com

NodeJSのMongoデータベースに挿入されたドキュメントの_idを取得します

NodeJSを使用して、MongoDBにドキュメントを挿入します。 collection.insertを使用すると、次のコードのようにドキュメントをデータベースに挿入できます。

// ...
collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId; // = ???
});
// ...

挿入されたオブジェクトの_idを取得するにはどうすればよいですか?

最新のオブジェクトを挿入せずに_idを取得する方法はありますか_id

同時に多くの人がデータベースにアクセスすると、最新のIDが挿入されたオブジェクトのIDであるかどうかはわかりません。

88
Ionică Bizău

挿入されたドキュメントを返すcollection.insertのコールバック用の2番目のパラメーターがあり、_idが必要です。

試してください:

collection.insert(objectToInsert, function(err,docsInserted){
    console.log(docsInserted);
});

コンソールをチェックして、意味を確認してください。

83
georgedyer

collection.insertのコールバックに2番目のパラメーターを使用するよりも短い方法は、objectToInsert._idを返す_idを使用することです(コールバック関数の内部で、成功した操作であると仮定)。

NodeJSのMongoドライバーは、元のオブジェクト参照に_idフィールドを追加するため、元のオブジェクトを使用して挿入されたIDを簡単に取得できます。

collection.insert(objectToInsert, function(err){
   if (err) return;
   // Object inserted successfully.
   var objectId = objectToInsert._id; // this will return the id of object inserted
});
82
Ionică Bizău

Ktretyakが言ったように、挿入されたドキュメントのIDを取得するための最良の方法は、結果オブジェクトでinsertIdプロパティを使用することです。私の場合、result._idが機能しなかったため、以下を使用する必要がありました。

db.collection("collection-name")
  .insertOne(document)
  .then(result => {
    console.log(result.insertedId);
  })
  .catch(err => {
    // handle error
  });

コールバックを使用する場合も同じです。

12
Serjuice

実際に、挿入用のコールバック関数の2番目のパラメーターに対してconsole.log()を実行しました。実際には、挿入されたオブジェクト自体とは別に多くの情報が返されます。そのため、以下のコードは、そのIDにアクセスする方法を説明しています。

collection.insert(objToInsert, function (err, result){
    if(err)console.log(err);
    else {
        console.log(result["ops"][0]["_id"]);
        // The above statement will output the id of the 
        // inserted object
       }
});
11
Sidak

Mongoは完全なドキュメントをコールバックオブジェクトとして送信するため、そこからのみ取得できます。

例えば

collection.save(function(err,room){
  var newRoomId = room._id;
  });

insertOne メソッドを使用して、promiseのresult.insertedIdで使用できるようになりました

4
ktretyak

@ JSideris、insertedIdを取得するためのサンプルコード。

db.collection(COLLECTION).insertOne(data, (err, result) => {
    if (err) 
      return err;
    else 
      return result.insertedId;
  });
1
Pyae Sone

「_id」を使用する場合は、simpleyを使用します

result.insertedId.toString() 

// toStringは16進数から変換します

0
Hamit YILDIRIM