0

this SO questionと実際にthis answerに基づいて、サブドキュメントのフィールドを更新しようとしました。

私のコードは次のとおりです。

db.venue.find().limit(10).forEach( 
    function (elem) {
        for (var i = elem.events.length - 1; i >= 0; i--) {
            elem.events[i].urls = [];            
            if(elem.events[i].facebook_id){
                elem.events[i].urls = {'facebook_url' : elem.events[i].website }
            }
            if(elem.events[i].eventbrite_id){
                elem.events[i].urls = {'eventbrite_url' : elem.events[i].website }
            }
            //delete elem.events[i].website
        };        
        db.venue.update(elem);
    }
);

elem.events[i]に facebook_id または eventbrite_id がある場合、配列である URL をそれぞれ更新します (スキーマ上の理由から)。

しかし、私は

Error: Printing Stack Trace
    at printStackTrace (src/mongo/shell/utils.js:37:15)
    at doassert (src/mongo/shell/assert.js:6:5)
    at assert (src/mongo/shell/assert.js:14:5)
    at DBCollection.update (src/mongo/shell/collection.js:220:5)
    at (shell):13:18
    at DBQuery.forEach (src/mongo/shell/query.js:264:9)
    at (shell):1:27
Mon Jan  6 20:10:48.758 assert failed : need an object at src/mongo/shell/assert.js:7

本当に理解できません。現在のユーザーの権限は問題ありません。

4

1 に答える 1

1

saveではなく、を呼び出す必要がありますupdate

`db.venue.save(elem);`

Update は、クエリ ドキュメントと更新ドキュメントの 2 つのパラメータを取ります。

間違いは、リンクした元の投稿にあります。

于 2014-01-06T19:07:16.343 に答える