这是我的架构
UserSchema = {
username: String,
/*Other stuffs*/
knows_about : [{topic: {type:String, ref:'Topic'},
bio: String}]
}
TopicSchema = {
title : {type: String, required: true, index: true},
followers : Number,
thumbnail : String,
created_date : {type: Date, default: Date.now()},
created_by:{type:String, ref:'User'}
}
我正在尝试将id和bio的主题对象添加到数组中。 $ push有效,但我想要的只是在主题ID不存在的情况下推送主题,如果它存在,那么在用户决定更新现有生物的情况下,而不是推动它更新bio。
我可以使用User.find查找用户,然后遍历数组以查看数组是否包含具有匹配主题ID的对象,是否有不同的方式?
答案 0 :(得分:0)
positional operator会让生活变得更轻松。这允许您直接查询和更新数组,但仍然需要两次查询以进行总操作,因为upsert不能与位置运算符一起使用。
更新现有标题。
col.findOneAndUpdate(
{ user: "waldo", knows_about: { $elemMatch: { title: "Whatever" }}},
{ $set: { "knows_about.$.bio": "some bio" }}
)
或者,如果没有找到/更新记录,则使用$push
col.findOneAndUpdate(
{ user: "waldo" },
{ $push: { knows_about: { title: "Whatever", bio: "new bio" }}}
)
我不知道管理Mongoose架构的一种非常简单的方法。