Javascript 如何在mongodb中将$push、$set和$inc组合在一起?
基本上,我在mongodb中使用环回,希望推送数据,设置数据并将数据相加,得到最终结果 为此我试过这个Javascript 如何在mongodb中将$push、$set和$inc组合在一起?,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,基本上,我在mongodb中使用环回,希望推送数据,设置数据并将数据相加,得到最终结果 为此我试过这个 db.invoice.findOneAndUpdate({ _id: ObjectId(req.params.id) }, { $push: { payment: paymentData } , $set: { payment_status: true, updated_at: new Date() } ,
db.invoice.findOneAndUpdate({ _id: ObjectId(req.params.id) },
{
$push: { payment: paymentData }
, $set: { payment_status: true, updated_at: new Date() }
, $inc: { total_amount_paid: paidAmt }
}
,
function (err, doc) {
if (err) { return new Error(err); }
else {
if (doc.result.n>0) {
setTimeout(function () { }, 200);
console.log(" Invoice updated with Payment info.");
nextCall(null, { code: 200, data: doc.result });
} else {
console.log("Something went wrong while payment info updation.")
nextCall(null, { code: 400, status: 'Something went wrong while payment info updation.' })
}
}
});
});
案例1:
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 8.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
db.getCollection('noti').findOneAndUpdate(
{ _id: ObjectId("5bc061f05a4c0511a9252e88") },
{ $push: {
graph: {
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
},
$inc: { count: 1 }
}, {new: true })
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 9.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
文档正在更新,但未推入付款数组
案例2:
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 8.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
db.getCollection('noti').findOneAndUpdate(
{ _id: ObjectId("5bc061f05a4c0511a9252e88") },
{ $push: {
graph: {
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
},
$inc: { count: 1 }
}, {new: true })
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 9.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
如果我删除回调函数
它正在推送、设置值并增加支付的总金额。$inc
如果我想实现案例2,有人能告诉我哪里做错了吗
谢谢一起执行
$push,$inc
操作
查找查询:
db.getCollection('noti').find({})
结果:
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 8.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
db.getCollection('noti').findOneAndUpdate(
{ _id: ObjectId("5bc061f05a4c0511a9252e88") },
{ $push: {
graph: {
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
},
$inc: { count: 1 }
}, {new: true })
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 9.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
更新查询:
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 8.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
db.getCollection('noti').findOneAndUpdate(
{ _id: ObjectId("5bc061f05a4c0511a9252e88") },
{ $push: {
graph: {
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
},
$inc: { count: 1 }
}, {new: true })
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 9.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
结果:
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 8.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
db.getCollection('noti').findOneAndUpdate(
{ _id: ObjectId("5bc061f05a4c0511a9252e88") },
{ $push: {
graph: {
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
},
$inc: { count: 1 }
}, {new: true })
{
"_id" : ObjectId("5bc061f05a4c0511a9252e88"),
"count" : 9.0,
"color" : "green",
"icon" : "circle",
"graph" : [
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 2.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 3.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 6.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 8.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 9.0
},
{
"date" : ISODate("2018-10-24T08:55:13.331Z"),
"count" : 10.0
}
],
"name" : "online visitor",
"read" : false,
"date" : ISODate("2018-10-12T08:57:20.853Z"),
"__v" : 0.0,
"views" : 1.0
}
这里的计数增加1,新的JSON对象被插入到图形数组中。在更新对象和回调之间添加选项对象。选项应具有
new:true
,这将从数据库返回更新的文档。默认情况下(从v4.0
)new
为false
,因此您在回调中的doc
尚未更新文档。