NodeJSを使用して、MongoDBにドキュメントを挿入します。 collection.insert
を使用すると、次のコードのようにドキュメントをデータベースに挿入できます。
// ...
collection.insert(objectToInsert, function(err){
if (err) return;
// Object inserted successfully.
var objectId; // = ???
});
// ...
挿入されたオブジェクトの_id
を取得するにはどうすればよいですか?
最新のオブジェクトを挿入せずに_id
を取得する方法はありますか_id
?
同時に多くの人がデータベースにアクセスすると、最新のIDが挿入されたオブジェクトのIDであるかどうかはわかりません。
挿入されたドキュメントを返すcollection.insert
のコールバック用の2番目のパラメーターがあり、_idが必要です。
試してください:
collection.insert(objectToInsert, function(err,docsInserted){
console.log(docsInserted);
});
コンソールをチェックして、意味を確認してください。
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
});
Ktretyakが言ったように、挿入されたドキュメントのIDを取得するための最良の方法は、結果オブジェクトでinsertIdプロパティを使用することです。私の場合、result._idが機能しなかったため、以下を使用する必要がありました。
db.collection("collection-name")
.insertOne(document)
.then(result => {
console.log(result.insertedId);
})
.catch(err => {
// handle error
});
コールバックを使用する場合も同じです。
実際に、挿入用のコールバック関数の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
}
});
Mongoは完全なドキュメントをコールバックオブジェクトとして送信するため、そこからのみ取得できます。
例えば
collection.save(function(err,room){
var newRoomId = room._id;
});
insertOne メソッドを使用して、promiseのresult.insertedIdで使用できるようになりました
@ JSideris、insertedIdを取得するためのサンプルコード。
db.collection(COLLECTION).insertOne(data, (err, result) => {
if (err)
return err;
else
return result.insertedId;
});
「_id」を使用する場合は、simpleyを使用します
result.insertedId.toString()
// toStringは16進数から変換します