1

mongo データベース操作に Nodejs ベースの mongoskin ドライバーを使用しています。ドキュメントを更新したいのですが、いくつかのフィールドを更新したくありません。以下、詳細です。

追加のリクエスト:

{
  "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. 上記の 2 つのフィールドをデータベースから読み取り、要求を更新してから、データベースの更新操作を実行します

クリーンなアプローチのヘルプを探しています。

4

1 に答える 1

4

更新のリクエストは実際には次のことを行います: ドキュメント内のすべてをリクエストによって提供された値に置き換えます (もちろん、不変の「_id」を除く)。あなたが望むのは、モンゴスフィアで「部分更新」と呼ばれるものです。$set operatorを調べてください。だからあなたがすることは次のようなものです:

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 に答える