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

Dav*_*vid 0 javascript mongoose mongodb node.js angularjs

我正在使用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'
  }]
});
Run Code Online (Sandbox Code Playgroud)

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

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

如您所见,这不起作用.它返回400Cast to ObjectId failed for value "[object Object]" at path "agencies", name:CastError,…}

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

Dav*_*vid 6

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

basket.lotions.push(lotion);
Run Code Online (Sandbox Code Playgroud)

basket.lotions.push(lotion._id);
Run Code Online (Sandbox Code Playgroud)

而MEANJS和Mongoose为我做了其余的繁重工作.很简单......我只花了几天时间搞清楚:/