mongo更新查询以忽略更新操作中的几个字段

时间:2014-05-19 20:52:10

标签: node.js mongodb mongodb-query mongoskin

我使用基于Nodejs的mongoskin驱动程序进行mongo数据库操作。我想更新我的文档,但不想更新几个字段。以下是更多细节。

请求添加:

{
  "name": "Theme Name",   
  "description": "Theme Description",
  "createdByUserId": "53651221b25521601a5c9530",    
} 

请求更新:

{
  "_id":"53555ef203dabf282b750a81"
  "name": "Theme Name",
  "categoryId": "53555ef203dabf282b750a81",
  "description": "Theme Description",  
  "createdByUserId": "53651221b25521601a5c9530",
  "updatedByUserId": "5675561b25521601a5c9530",
  "dateCreated": ISODate("2014-05-19T19:47:26.603Z"),
  "dateUpdated": ISODate("2014-05-19T19:49:28.203Z"),
}

我想忽略客户端发送的以下字段。 1. createdByUserId 2. dateCreated

暂时我在更新操作中采取以下方法: 1.阅读给定_id的集合 2.从数据库中读取以上两个字段并更新请求,然后执行数据库更新操作

寻求干净方法的帮助。

1 个答案:

答案 0 :(得分:2)

您的更新请求实际执行以下操作:它使用请求提供的值替换文档中的所有内容(当然,“_id”除外,这是不可变的)。你想要的是在蒙古的所谓的"partial update"。请查看$set operator。所以你要做的就是:

db.yourcollection.update({"_id":"53555ef203dabf282b750a81"},
  {$set:
    {
      "categoryId":"53555ef203dabf282b750a81",
      "updatedByUserId":"5675561b25521601a5c9530",
      "dateUpdated":ISODate("2014-05-19T19:49:28.203Z")
    }
  }
)

据我所知,现在有办法将完整的文件发送给mongo [s | d]并告诉它只跳过某些字段。