我正在尝试将时间对象插入times数组中,以用于特定用户的特定活动名称。例如,如果用户是“ someuser”,而我想为吉他演奏时间增加时间,则我不确定该怎么做。
{
username: "someuser",
activities: [
{
name: "guitar",
times: []
},
{
name: "code",
times: []
}
]
}, {
username: "anotheruser",
activities: []
}
这是我目前拥有的功能,我无法弄清楚自己在做什么错,任何帮助将不胜感激:
function appendActivityTime(user, activityName, newRange) {
User.updateOne(
{username: user, 'activities.name': activityName},
{ $push: {'activities.$.times': {newRange}},
function (err) {
if (err) {
console.log(err);
} else {
console.log("Successfully added time range: " + newRange);
}
}}
);
}
appendActivityTime("someuser", "guitar", rangeObject);
答案 0 :(得分:0)
我已经尝试了您的尝试,并且对我有用:
db.getCollection("test").updateOne(
{ username: "someuser", "activities.name": "guitar" },
{ $push: { "activities.$.times": { from: ISODate(), to: ISODate() } } } //Don't worry about ISODate() in node.js use date objects
)
结果:
{
"_id" : ObjectId("5f6c384af49dcd4019982b2c"),
"username" : "someuser",
"activities" : [
{
"name" : "guitar",
"times" : [
{
"from" : ISODate("2020-09-24T06:15:03.578+0000"),
"to" : ISODate("2020-09-24T06:15:03.578+0000")
}
]
},
{
"name" : "code",
"times" : [
]
}
]
}
我建议您使用的是arrayFilter,它们更加精确,当您习惯它们时,它们变得非常方便
答案 1 :(得分:0)
如果您不确定是否要更新嵌套文档,请让猫鼬进行查询。
让文档=等待Model.findOne({});
document.activities = new_object;
等待document.save();