1

我正在使用基于 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.从数据库中读取上述两个字段并更新请求,然后执行数据库更新操作

寻求清洁方法的帮助。

4

1 回答 1

4

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

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

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

于 2014-05-20T11:52:16.850 回答