【问题标题】:How to change sub document after finding with mongoose用猫鼬找到后如何更改子文档
【发布时间】:2013-09-06 17:57:26
【问题描述】:

我有一些使用猫鼬的代码,如下所示。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/hoge');
var UserSchema = new Schema({
  name: String,
  children: [ChildSchema],
});
var ChildSchema = new Schema({
  name: String,
}, {_id: false});

var User = mongoose.model('User', UserSchema);
var Child = mongoose.model('Child', ChildSchema);

User.findOne({_id: '52299322fdbbdec515000001'}, function(err, user) {
  console.log(user);
  for (var i=0; i<user.children.length; i++) {
    var child = user.children[i];
    child.name = 'newchild';
  }
  user.save(function(err) {
    console.log(user);
    mongoose.disconnect();
  });
});

这是我在 mongodb 中的记录。

{
  "name" : "u1",
  "_id" : ObjectId("52299322fdbbdec515000001"),
  "children" : [ { "name" : "c2" } ],
  "__v" : 0
}

当我运行脚本时,它会在下面输出。

{ name: 'u1',
  _id: 52299322fdbbdec515000001,
  __v: 0,
  children: [ { name: 'c2' } ] }

{ name: 'u1',
  _id: 52299322fdbbdec515000001,
  __v: 0,
  children: [ { name: 'newchild' } ] }

但是我在 mongodb 中的记录并没有改变。为什么?

仅供参考,如果我在保存之前插入此代码,则记录已更改。

user.children.push({name: 'somechild'});

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    对不起,我自己解决了。

    问题在于声明模式的顺序。

    如果我尝试了这个更改,它会起作用。

    /* first, children's schema */
    var ChildSchema = new Schema({
      name: String,
    }, {_id: false});
    
    /* seconds, parent's schema */
    var UserSchema = new Schema({
      name: String,
      children: [ChildSchema],
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      相关资源
      最近更新 更多