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

joy*_*joy 3 mongodb node.js mongodb-query mongoskin

我正在使用基于 Nodejs 的 mongoskin 驱动程序进行 mongo 数据库操作。我想更新我的文档,但不想更新一些字段。以下是更多详细信息。

请求添加:

{
  "name": "Theme Name",   
  "description": "Theme Description",
  "createdByUserId": "53651221b25521601a5c9530",    
} 
Run Code Online (Sandbox Code Playgroud)

请求更新:

{
  "_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"),
}
Run Code Online (Sandbox Code Playgroud)

我想忽略客户端发送的以下字段。1.按用户 ID 创建 2.创建日期

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

寻求清洁方法的帮助。

Mar*_*erg 5

您的更新请求实际上执行以下操作:它将文档中的所有内容替换为请求提供的值(当然“_id”除外,它是不可变的)。您想要的是 mongosphere 中所谓的“部分更新”。请查看$set 运算符。所以你会做的是这样的:

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

据我所知,现在有一种方法可以将完整的文档发送到 mongo[s|d] 并告诉它仅跳过某些字段。

  • 回复中博客文章的链接无效。不过我用谷歌搜索了一下,猜想新链接是这样的:https://www.mongodb.com/blog/post/partial-object-updates-will-be-an-important (2认同)