【发布时间】:2020-06-08 13:49:20
【问题描述】:
exports.update_activity_status = (req, res) => {
const {
campaign_id,
leadId,
leadActivity,
status,
} = req.body;
const client = mongoClient.connect(`${process.env.MONGO_URL}`, {
useUnifiedTopology: true,
});
client.then((cli) => {
cli
.db(`${process.env.DATABASE_NAME}`)
.collection(`${process.env.ACTIVITY_COLLECTION}`)
.findOneAndUpdate(
{
"data.campaign_id": mongoose.Types.ObjectId(campaign_id),
"data.leads.$._id": mongoose.Types.ObjectId(leadId),
// "data.leads._id" : leadId
},
{
$set: {
"data.leads.$.leadActivity": leadActivity,
"data.leads.$.status": status,
},
},
{
returnNewDocument: true,
}
)
.then((result) => {
console.log("UPDATED RESULT", result);
res.json(result)
})
.catch((err) => console.log("new err", err));
});
};
在我的查询中,我需要更新leadId 符合以下条件的用户的状态和leadActivity:
- campaign_id 与文档匹配(这工作正常)。
- 在该特定文档中匹配的leadsId(无效)。
首先我尝试只使用db.find({"data.campaign_id": mongoose.Types.ObjectId(campaign_id)}),它返回的数据只匹配上面指定的第一个条件。一旦我与第二个条件和findOneAndUpdate({....}) 一起尝试,在包含辅助过滤条件后访问嵌套数据将返回null。
这是我的文档对象的样子:
【问题讨论】:
标签: javascript node.js arrays mongodb updates