0

次のようなドキュメント構造があるとします。

thing: {
  name: {
    first: "John",
    last: "Doe"
  }
}

姓のみを更新したいとします。更新するにはどのコマンドを送信しますか?

$set: {
  name: {
    first: "Connor"
  }
}

また

$set: {
  "name.first": "Connor"
}

違いはありますか?それとも好み?実際のドキュメントに似ているため、最初の方法を好みますが、mongodb のドキュメントでは 2 番目の方法を使用しています。

4

1 に答える 1

6

$setコマンドはキーを受け取り、そこに格納されていたものを渡した値で上書きします。だからこの場合

$set: {
  name: {
    first: "Connor"
  }
}

潜在的にリッチな構造を持つサブドキュメント全体nameが、単純な に置き換えられてい {first: 'Connor'}ます。

2 番目のケースでも同様のことが起こっていますが、1 レベル深いだけです。この場合は文字列ですが、ハッシュの場合もあります。

$set: {
  "name.first": "Connor"
}

適切なドット名を作成することにより、任意の深さレベルでフィールドを更新できます。これは少し不自然な例です

db.collection.update(query, {$set: {'stats.daily.20120622.mainpage.visited': 1}});
于 2012-06-22T05:43:01.460 に答える