mongodb - Mongoose:从一堆文件中更新一个文件
问题描述
我有以下几乎可以工作的代码。它将检查域的状态是否已经设置,如果没有,它将推送一个新状态。如果已经有一个,它将更新它,除非存储了不同域的多个状态,在这种情况下,它将替换其他域的所有其他文档,而不仅仅是特定域的一个条目。
if (Boolean(checkStat) === true) {
await userModel.findByIdAndUpdate(
{
_id: ctx.userId,
domain: args.domain,
},
{
["preferences.domain.status"]: {
domain: args.domain,
status: args.status,
},
},
);
return {
message:
"sucessfully updated status of " +
args.domain +
" to " +
args.status,
};
} else {
await userModel.findByIdAndUpdate(
ctx.userId,
{
$push: {
["preferences.domain.status"]: {
domain: args.domain,
status: args.status,
},
},
},
{
upsert: true,
new: true,
}
);
return {
message:
"sucessfully set status of " + args.domain + " to " + args.status,
};
}
preferences:
domain:
labels:
status:
0:
domain: "x.wtf"
status: "online"
_id: "Jz-ttsjEXKBSVxAN91CzD"
1:
domain: "a.lol"
status: "online"
_id: "Jz-ttsjEXKBSVxAN91CzD"
const userSchema = new mongoose.Schema({
preferences: {
domain: {
status: [
{
_id: {
type: String,
default: () => nanoid(),
},
domain: String,
status: String,
},
],
labels: [
{
_id: {
type: String,
default: () => nanoid(),
},
domain: String,
label: String,
},
],
},
},
});
解决方案
您可以使用$运算符,findOneAndUpdate
而不是findByIdAndUpdate
这样做:
await userModel.findOneAndUpdate(
{
_id: ctx.userId,
"preferences.domain.status.domain": args.domain,
},
{
"preferences.domain.status.$.status": args.status,
}
);
推荐阅读
- python-3.x - python行用一个元素划分
- node.js - 如何从另一条路线调用一个模型
- sql - 将具有两个不同日期的数据分组并取最新日期
- javascript - nodejs 按文件类型计算文件大小
- rust - 仅匹配有效的 UTF-8 字符
- javascript - 如何检查 discord.js 中是否存在消息
- javascript - Angular 8 - 在单词出现时动态插入带有回调调用的按钮
- exception - 使用 Apache Camel 处理 onException() 异常
- android - 如何从 Rest API 获取动态数据
- centos7 - 参考:jfrog artifactory could not validate router error