{
"_id": {
"$oid": "5a4e5b1d09fb590058bfdf86"
},
"name": "ProjectStore",
"imageURL": "none",
"longitude": 0,
"latitude": 0,
"rating": 5,
"leads": [
{
"customerId": "5a0c57db65a4931768716566",
"customerName": "testuser",
"interested": "testuser",
"_id": {
"$oid": "5a4e5b5409fb590058bfdf88"
}
}
],
"items": [
{
"name": "chat",
"categoryID": "5a0c2d292235680012bd12c9",
"semiCatID": "5a0c2d5f2235680012bd12cb",
"_id": {
"$oid": "5a4e5b3009fb590058bfdf87"
}
}
],
"__v": 2
}
我添加了我的数据库日志,我尝试编写查询,让我更新/推送信息到" LeadStatus"。
这个变量应该在" lead"中的每个对象内。阵列。
我有主要ID" 5a4e5b1d09fb590058bfdf86" 我有特定领导的第二把钥匙" 5a4e5b5409fb590058bfdf88"
我只是不知道如何编写查询,现在我得到了这个....并且得到了错误。
Store.update(
{ _id: req.body.store._id, 'leads._id': 'req.body.lead._id', },
{ $set: { 'leads.$.LeadStatus': 'open' }, },
(err, result) => {
if (err) {
res.status(500)
.json({ error: 'Unable to update leads.', });
} else {
res.status(200)
.json(result);
}
}
);
请帮助, 感谢。
答案 0 :(得分:0)
我假设您希望返回更新的文档(您也可以选择不这样做,将选项new切换为false)。您必须为对象分配您正在更新的值,并提供您正在更新的子字段中的所有字段,否则它将删除其他所有字段。这就是为什么你必须先做一个findOne:
return Store.findOne({ '_id': "5a4e5b1d09fb590058bfdf86" })
.then((store) => {
if (!store) { // patient was not found for some reason
throw new Error(`Store id was not found`);
}
const options = {
new: true,
};
const updatedStore = Object.assign({}, store.toObject(), {
leads: [
{
"leadStatus": "open",
"customerId": "5a0c57db65a4931768716566",
"customerName": "testuser",
"interested": "testuser",
"_id": {
"$oid": "5a4e5b5409fb590058bfdf88"
}
}
],
});
return Store.findOneAndUpdate(
{ '_id': req.body.store._id },
{ $set: updatedStore },
options);
});
如果您感到好奇,可以使用findOneAndUpdate构建预先/虚拟挂钩(没有相关文档),不会因为不使用更新而丢失任何内容。