此查询在mongo shell中运行
db.orders.updateOne({ _id: ObjectId("5e26be38c13b7149d0a95111"),
"submittedTo":ObjectId("5e2555363405363bc4bf86c2") },
{ $set: {
... "vendorOrder" : [
... {
... "_id" : ObjectId("5e26be38c13b7149d0a95113"),
... "publicationCode" : "TOI",
... "publicationName" : "Times of India",
... "editionName" : "chennai city",
... "productCode" : "TCE1",
... "subscriptionCopies" : 70,
... "tradeCopies" : 9
... },
... {
... "_id" : ObjectId("5e26be38c13b7149d0a95112"),
... "publicationCode" : "ET",
... "publicationName" : "Economic Times",
... "editionName" : "chennai city",
... "productCode" : "ECE1",
... "subscriptionCopies" : 20,
... "tradeCopies" : 4
... }
... ]}})
Mongo shell响应: { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
但是它的在nodejs中不起作用:到目前为止,这是我尝试过的query1:
exports.editOrder = async (req, res, next) => {
const { orderId, dealerId, vendorOrder } = req.body;
try {
const orders = await Order.updateOne(
{
_id: orderId,
submittedTo:dealerId
},
{ $set: { vendorOrder } }
);
res.status(200).json({
orders,
message: "order submitted"
});
} catch (error) {
res.send(error);
}
};
query2
exports.editOrder = async (req, res, next) => {
const { orderId, dealerId, vendorOrder } = req.body;
try {
const orders = await Order.updateOne(
{
_id: mongoose.Types.ObjectId(orderId),
submittedTo: mongoose.Types.ObjectId(dealerId)
},
{ $set: { vendorOrder: vendorOrder } }
);
res.status(200).json({
orders,
message: "order submitted"
});
} catch (error) {
res.send(error);
}
};
查询3:带双“”其余代码完全相同
const { orderId, dealerId, vendorOrder } = req.body;
try {
const orders = await Order.updateOne(
{
"_id": mongoose.Types.ObjectId(orderId),
"submittedTo": mongoose.Types.ObjectId(dealerId)
},
{ $set: { "vendorOrder": vendorOrder } }
);
POSTMAN JSON:
{
"orderId":"5e26be38c13b7149d0a95111",
"submittedTo":"5e2555363405363bc4bf86c2",
"vendorOrder" : [
{
"_id" : "5e26be38c13b7149d0a95113",
"publicationCode" : "TOI",
"publicationName" : "Times of India",
"editionName" : "chennai city",
"productCode" : "TCE1",
"subscriptionCopies" : 70,
"tradeCopies" : 90
},
{
"_id" : "5e26be38c13b7149d0a95112",
"publicationCode" : "ET",
"publicationName" : "Economic Times",
"editionName" : "chennai city",
"productCode" : "ECE1",
"subscriptionCopies" : 20,
"tradeCopies" : 40
}
]
邮递员回复
{
"orders": {
"n": 0,
"nModified": 0,
"ok": 1
},
"message": "order submitted"
}
两句话:
查询#2(或#3)正确-您应该始终使用ObjectId
将字符串转换为mongoose.Types.ObjectId(...)
。
您的代码的下一个问题是您的解构:
const { orderId, dealerId, vendorOrder } = req.body;
期望dealerId
,而您的有效载荷包含submittedTo
字段,因此您应该尝试:
const { orderId, submittedTo, vendorOrder } = req.body;
const orders = await Order.updateOne(
{
_id: mongoose.Types.ObjectId(orderId),
submittedTo: mongoose.Types.ObjectId(submittedTo)
},
{ $set: { vendorOrder: vendorOrder } }
);
这很好用(请注意,如果nModified
变量和0
之间没有任何更改存储在数据库中,则vendorOrder
将作为vendorOrder
返回。