如何在MongoDB中添加对象数组中的值?

时间:2016-01-02 03:36:50

标签: node.js mongodb mongoose

这是我的架构

 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的对象,是否有不同的方式?

1 个答案:

答案 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架构的一种非常简单的方法。