1. ホーム
  2. mongodb

MongoDB: 同じドキュメントのデータを使ってドキュメントを更新する [重複]。

2023-09-09 03:57:29

質問

私はドキュメントのリストを持っており、それぞれ緯度と経度のプロパティ(他のプロパティも含む)を持っています。

{ 'lat': 1, 'lon': 2, someotherdata [...] } 
{ 'lat': 4, 'lon': 1, someotherdata [...] }
[...]

このように修正したいのですが、どうすればいいですか?

{ 'coords': {'lat': 1, 'lon': 2}, someotherdata [...]} 
{ 'coords': {'lat': 4, 'lon': 1}, someotherdata [...]}
[...]

今のところ、こんな感じです。

db.events.update({}, {$set : {'coords': {'lat': db.events.lat, 'lon': db.events.lon}}}, false, true)

しかし、これは db.events.lat db.events.lon を文字列として使用します。ドキュメントのプロパティを参照するにはどうしたらよいでしょうか。

応援しています。

どのように解決するのですか?

この $rename 演算子(この質問が投稿された1ヶ月後に導入されました)は、値を修正する必要のないこの種のことを本当に簡単にできるようにします。

いくつかのテストドキュメントを挿入する

db.events.insert({ 'lat': 1, 'lon': 2, someotherdata: [] })
db.events.insert({ 'lat': 4, 'lon': 1, someotherdata: [] })

を使う $rename 演算子

db.events.update({}, {$rename: {'lat': 'coords.lat', 'lon': 'coords.lon'}}, false, true)

結果

db.events.find()
{
    "_id" : ObjectId("5113c82dd28c4e8b79971add"),
    "coords" : {
        "lat" : 1,
        "lon" : 2
    },
    "someotherdata" : [ ]
}
{
    "_id" : ObjectId("5113c82ed28c4e8b79971ade"),
    "coords" : {
        "lat" : 4,
        "lon" : 1
    },
    "someotherdata" : [ ]
}