15

次のようなデータ構造があるとします。

{
    'name': 'test',
    'anotherdoc': {
        'something': 'someval',
        'somenum': 1
    }
}

さて、何かを設定したいとしましょう。最初は、次のようになりますが、次のようになります。

collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'});

ただし、これは正しくないようです。そこにいくつかのデータを入れますが、奇妙な方法で入れます。この場合、次のようになります。

[
    {
        'name': 'test',
        'anotherdoc': {
            'something': 'someval',
            'somenum': 1
        }
    },
    ['anotherdoc.something', 'someval']
]

もちろん、私が探していたものではありません。

4

2 に答える 2

14

以下はmongoシェルから私のために機能します-それで私はあなたのために上で何が起こったのかわかりません。これを試して、それが機能するかどうかを確認しますか?もしそうなら、何か問題があった場合に備えて、最新のmongoコードを入手してください。

x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } }
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection = db.foo;
test.foo
> collection.insert(x)
> collection.find()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x._id
> x = collection.findOne()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}} )
> collection.find()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}}
> 

上記のように、MongoDBフォーラムはおそらくより速く表示されます(またはIRCを試してください)。

于 2009-07-18T11:52:56.677 に答える
0

これは、mongodbユーザーのgooglegroupで尋ねた方がよいでしょう。あなたの質問に対する答えはここにありますhttp://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca?hl=en

于 2009-07-18T11:42:11.740 に答える