Node.js+;MongoDB:插入一个并返回新插入的文档

Node.js+;MongoDB:插入一个并返回新插入的文档,node.js,mongodb,Node.js,Mongodb,我想知道是否有办法插入新文档并一次性返回 这是我目前正在使用的: db.collection('mycollection').insertOne(options, function (error, response) { ... }); 你可以这样做。使用save方法,您可以插入文档并在成功时返回。以下是来自以下方面的示例: product.save(函数(err、product、numAffected){ 如果(错误){ //处理错误。。。 }否则{ //对返回的文档执行某些操作。。

我想知道是否有办法插入新文档并一次性返回

这是我目前正在使用的:

db.collection('mycollection').insertOne(options, function (error, response) {
    ...
});
你可以这样做。使用
save
方法,您可以插入文档并在成功时返回。以下是来自以下方面的示例:

product.save(函数(err、product、numAffected){
如果(错误){
//处理错误。。。
}否则{
//对返回的文档执行某些操作。。。
}
})
您可以使用它来执行此操作

db.collection('mycollection').save(doc, function(error, response){
  // response has _id
})

响应
结果包含有关命令是否成功以及插入的记录数的信息

如果要返回插入的数据,可以尝试
response.ops
,例如:

db.collection('mycollection').insertOne(doc, function (error, response) {
    if(error) {
        console.log('Error occurred while inserting');
       // return 
    } else {
       console.log('inserted record', response.ops[0]);
      // return 
    }
});
insertOne的官方文档

回调
类型:

结果
类型:


MongoDB 2.2.33版中,以下代码对我有效。

db.collection("sample_collection").insertOne({
   field1: "abcde"
}, (err, result) => {
   if(err) console.log(err);
   else console.log(result.ops[0].field1)
}

发布此消息,因为这可能对某人有所帮助。您可以找到更新的对象,如下所示:

await req.db
    .collection('users')
    .insertOne({ email, password: hashedPassword, name  })
    .then(({ ops }) => ops[0]);
试试这个

try {
    let collection = db.collection('collection_name'); let { ops: inserted } = 
    await collection.insertOne({ data: object });
    // can access array of inserted record like :
    console.log(inserted)
 } catch (error) {
    // log errors
 }

我希望仍然使用.then()通过插入来解析,所以我最终将所有内容都包装在它自己的承诺中

 return new Promise((resolve, reject) => {
     db.collection('entries').insertOne({ entry }, (err, res) => {
     if (err) {
       console.log('error', err);
       reject(null);
     } else {
       resolve(res.ops[0]);
     }
   });
 });
那我就可以做了

 insertEntry({}).then(entry=>{})

你说退回新的是什么意思?是否希望insertOne的响应是具有_id的文档?不,您不能。insert方法只返回文档插入成功的确认。不能将两个动作合并为一个动作。insert()成功后,必须再次启动find()!但是当我执行
console.log(response)
操作时,
ops
没有出现,这有点奇怪!它与评估值的时间有关。谢谢!它在github页面的
mongodb
驱动程序的
node
部分中有记录。从文档中:
ops-包含插入了添加的_id字段的文档
。有时文档会建议不推荐的方法,然后终端会发出警告,似乎stackoverflow有更多更新的代码。答案是正确的,虽然我不确定为什么
ops
是一个数组,而方法应该只插入一个文档。如果文档已经存在,它将返回它。不是新的