6

私が何を意味するのか説明できないので、これが私がやろうとしていることの例です。

これを mongo CLI で実行します: db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []}). 私がやりたいことは、そのエントリを更新して、comments辞書にコメントを追加することです。

を使用してこれを達成するにはどうすればよいdb.posts.update()ですか?

4

2 に答える 2

15

OPの質問と例が一致しません。彼は実際には、ドキュメント内の配列にフィールドを挿入したいと考えています。つまり、

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});

うまく動作します。

ただし、辞書に値またはサブドキュメントを追加する場合は、$setコマンドを使用します。このドキュメントを例として取り上げます。

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": 5,
        "bananas": 10
    }
}

"apples": 2アイテムに追加したいとしましょう。コマンドは次のようになります

db.collection.update({"name": "Farmer John"},
                     {"$set": {"items.apples": 2}});

ドキュメントは次のようになります。

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": 5,
        "bananas": 10,
        "apples: 2
    }
}

これはサブドキュメントの挿入でも機能するため、元の例を変更できることに注意してください。

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": {
            "yellow": 5,
            "white": 3
        }
    }
}

そして、グラニースミスりんご4個とふじりんご8個を入れましょう。

db.collection.update({"name": "Farmer John"},
                     {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}});

ドキュメントは次のようになります。

{
    "_id": {
        "$oid": "538420b2862a656e9e99fc93"
    },
    "name": "Farmer John",
    "items": {
        "peaches": {
            "yellow": 5,
            "white": 3
        },
        "apples": {
            "fuji": 8,
            "granny smith": 4
        }
    }
}

最後のコメント: サブドキュメントまたはフィールドが既に存在する場合は、$setコマンドによって上書きされることに注意してください。

于 2014-06-30T16:56:28.850 に答える
-3

次のようなオブジェクトの場合:

{
  name: "Hello, world!",
  content: "This is my first post"
}

あなたが今実行する場合

db.posts.update({name: "Hello, world!"}, {name: "First post"});

これが結果になります。

{
  title: "First post"
}

代替値が提供されていないため、 content 属性は削除されます。これは一般的なエラーであるため、これについて言及しています。

したがって、属性を「追加」したい場合は、次を実行する必要があります。

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}});

$push は、配列にデータを追加する場合に使用されます。通常のフィールドの場合は $set を使用します。

参照: http://www.mongodb.org/display/DOCS/Updating

于 2012-07-10T11:40:32.613 に答える