填充不适用于ObjectID数组

时间:2015-05-06 13:18:59

标签: javascript node.js mongodb mongoose

这是我的模型的实现:

var itemSchema = new Schema({
    name : String,
    qte : Number
});

var Item = mongoose.model('Item', itemSchema);    

var orderSchema = new Schema({
    state : {
        type: String,
        enum: ['created', 'validated', 'closed', 'starter', 'meal', 'dessert'],
        required : true
    },
    table : {
        number : {
            type : Number,
            required : true
        },
        name : {
            type : String,
            required : false
        }
    },
    date: { type: Date, default: Date.now },
    _items : [{type:Schema.Types.ObjectId, ref:'Item'}]
});

这就是我查询的方式

getByIdRaw : function (orderId, callback) {
            Order.findById(orderId)
            .populate('_items')
            .exec(function(err, order) {
                debug(order);
                callback(order);
            });
        }

这是我的回复,没有填充

{
    _id: "5549e17c1cde3a4308ed70d5"
    state: "created"
    _items: [1]
        0:  "5549e1851cde3a4308ed70d6"
    -
    date: "2015-05-06T09:40:12.721Z"
    table: {
        number: 1
    }-
    __v: 1
}

...和填充_items时的回复

{
    _id: "5549e17c1cde3a4308ed70d5"
    state: "created"
    __v: 1
    _items: [0]
    date: "2015-05-06T09:40:12.721Z"
    table: {
       number: 1
    }-
}

为什么_items数组为空?我做错了什么?

编辑:addItem函数

addItem : function (orderId, item, callback) {
            Order.findById(orderId)
            .exec(function(err, order) {
                if (err) {
                    error(err);
                    return callback(err);
                }
                if (order === null) {
                    return callback("No order with this id");
                }

                var newItem = new Item({
                    name : item.name,
                    qte :item.qte
                });
                order._items.push(newItem);
                order.markModified('_items');
                order.save();
                callback();
            });
        }

1 个答案:

答案 0 :(得分:0)

问题是新项目永远不会持久存储到项目集合中。仅使用Mongoose引用填充它们不会将新项目持久保存到引用的集合中。

addItem: function(orderId, item, callback) {
  var newItem = new Item({
    name: item.name,
    qte: item.qte
  });

  newItem.save(function(err, savedItem) {
    if (err) {
      error(err);
      return callback(err);
    }

    Order.findById(orderId).exec(function(err, order) {
      if (err) {
        error(err);
        return callback(err);
      }
      if (order === null) {
        return callback("No order with this id");
      }

      order._items.push(savedItem);
      order.markModified('_items');
      order.save(callback);
    });
  });
}