Answers:
回调的第二个参数collection.insert
将返回插入的一个或多个doc,其中应包含_ids。
尝试:
collection.insert(objectToInsert, function(err,docsInserted){
console.log(docsInserted);
});
并查看控制台,了解我的意思。
比使用第二个参数进行回调的方法更短的方法collection.insert
是使用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
});
objectInserted
?我想您恰好错过了此答案的重点:Mongo驱动程序将_id
字段追加到原始对象。我编辑了答案以objectToInsert
在任何地方使用。希望现在情况已经清楚了。:)
insert()
已弃用。请insertOne()
改用
我实际上为插入的回调函数中的第二个参数做了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
}
});
ObjectID {_bsontype: "ObjectID", id: Buffer(12)}
。我如何使用它来获取数据库中的实际ID?...在另一条评论中找到了答案:使用result.insertedId.toString()
Mongo将完整的文档作为回调对象发送,因此您仅可以从那里获取它。
例如
collection.save(function(err,room){
var newRoomId = room._id;
});
现在您可以在insert的result.insertedId中使用insertOne方法
(doc, options, callback)
。第三个参数-回调,它 带有两个参数(error, result)
。而且result
-这就是您要寻找的。
在异步功能中执行此操作的另一种方法:
const express = require('express')
const path = require('path')
const db = require(path.join(__dirname, '../database/config')).db;
const router = express.Router()
// Create.R.U.D
router.post('/new-order', async function (req, res, next) {
// security check
if (Object.keys(req.body).length === 0) {
res.status(404).send({
msg: "Error",
code: 404
});
return;
}
try {
// operations
let orderNumber = await db.collection('orders').countDocuments()
let number = orderNumber + 1
let order = {
number: number,
customer: req.body.customer,
products: req.body.products,
totalProducts: req.body.totalProducts,
totalCost: req.body.totalCost,
type: req.body.type,
time: req.body.time,
date: req.body.date,
timeStamp: Date.now(),
}
if (req.body.direction) {
order.direction = req.body.direction
}
if (req.body.specialRequests) {
order.specialRequests = req.body.specialRequests
}
// Here newOrder will store some informations in result of this process.
// You can find the inserted id and some informations there too.
let newOrder = await db.collection('orders').insertOne({...order})
if (newOrder) {
// MARK: Server response
res.status(201).send({
msg: `Order N°${number} created : id[${newOrder.insertedId}]`,
code: 201
});
} else {
// MARK: Server response
res.status(404).send({
msg: `Order N°${number} not created`,
code: 404
});
}
} catch (e) {
print(e)
return
}
})
// C.Read.U.D
// C.R.Update.D
// C.R.U.Delete
module.exports = router;