MeanJS:在Angular中设置数组中的Mongoose对象引用

MeanJS: setting Mongoose object reference in array in Angular

本文关键字:Mongoose 对象引用 数组 设置 Angular MeanJS      更新时间:2023-09-26

我正在使用MeanJS,遇到了一个障碍。如果可能的话,我想使用MeanJS提供的Angular中$resource服务的$update函数。以下是我尝试做的一个非常简化的版本:

Mongoose模式:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var Lotion = new Schema({
  name: String;
});
var BasketSchema = new Schema({
  lotions: [{
    type: Schema.ObjectId,
    ref: 'Lotion'
  }]
});

Angular:请注意,我已经在页面加载时检索到了Lotion对象和Basket对象,现在只是尝试将Lotion对象添加到篮子的乳液数组中。

$scope.putTheLotionInTheBasket = function(lotion, basket){
  basket.lotions.push(lotion);
  basket.$update(function(data){
                //success
            },
            //failure
            function(error){
                $scope.error = error.data.message;
            }
  )
}

正如你所看到的,这是行不通的。它返回一个带有Cast to ObjectId failed for value "[object Object]" at path "agencies", name:CastError,…} 的400

有没有一种简单但正确的方法可以做到这一点?我是否必须创建一个新的REST端点和$resource函数,并传递乳液ID才能在服务器上进行查找,即使我在客户端已经有了这两个对象?

我对解决方案的简单性感到尴尬,但它就在这里。由于Mongoose会在内部将一个有效的十六进制对象ID字符串强制转换为Mongoose.Schema.ObjectId,我可以简单地替换

basket.lotions.push(lotion);

带有

basket.lotions.push(lotion._id);

然后MEANJS和Mongoose为我完成剩下的繁重工作。很简单。。。我只花了几天时间就弄清楚了:/