Как использовать mongoose update и обновить встроенный документ? - PullRequest
1 голос
/ 03 апреля 2012

Я уже прочитал документ Мангуста, и до сих пор не могу понять, как обновить документ.

Я использую ноду, экспресс и mongodb с Мангуста.

этоколлекция в моем mongodb ...

{ "title" : "this is a title",
    "_id" : ObjectId( "4f7a92554ad893f322000004" ),
  "nodes" : [ 
               { "title" : "this is node 1",
                   "_id" : ObjectId( "4f7a92554ad893f322000009" ) }, 
               { "title" : "this is node 2",
                   "_id" : ObjectId( "4f7a92554ad893f322000008" ) }, 
               { "title" : "this is node 3",
                   "_id" : ObjectId( "4f7a92554ad893f322000007" ) }, 
               { "title" : "this is node 4",
                   "_id" : ObjectId( "4f7a92554ad893f322000006" ) }, 
               { "title" : "this is node 5",
                   "_id" : ObjectId( "4f7a92554ad893f322000005" ) }
            ]
}

как обновить узлы для встраивания документа ???

app.put('/api/paper/:pid/:nid', function(req, res) {
    var PaperModel = mongoose.model('papers', Paper);
    PaperModel.update({_id: req.params.pid, 'nodes._id': req.params.nid}, {title: 'this         is a new node title'}, function(error, result) {
        console.dir(result);
    });
});

это не работает.

как обновить для встраиваниямассив "узлы"

node._id: 4f7a92554ad893f322000009 title: это узел 1 к заголовку: это новый заголовок?

1 Ответ

7 голосов
/ 18 апреля 2012
PaperModel.update(
    {_id: req.params.pid, 'nodes._id': req.params.nid}
  , { $set: {'nodes.$.title': 'this is a new node title'}}
  , function(error, result) {
      console.dir(result);
    }
);

Обратите внимание, что за один раз можно обновлять только один поддокумент (ограничение mongodb).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...