MongoDB _id作为字符串(MEAN堆栈)

时间:2014-11-19 00:20:09

标签: javascript angularjs node.js mongodb express

TL; DR - 我正在尝试将表单输入中的收集值用作文档_id,但我得到的是404。

我有一个打开并收集表单数据的模式。我在表单中的第一个输入是:

<input type="text" id="name" name="name" data-ng-model="name" />

当我尝试修改Mongo(Mongoose)模型时,要使用name作为_id,表单不会发布。我从http://sitegoeshere/#!/somethings/whatever_i_type_in_for_name

获得了404

示例模型:

var SomethingSchema = new Schema({
   _id: {
       type: String,
       default: 'default',
       trim: true
   }
}

mongoose.model('Something', SomethingSchema);

在我的Angular控制器中:

$scope.create = function() {

    // Create new Something object
    var something = new Somethings ({
        _id: this.name
    });

    // Redirect after save
    something.$save(function(response) {
        $location.path('somethings/' + response._id);
    }, function(errorResponse) {
        $scope.error = errorResponse.data.message;
    });
};

我被告知MongoDB允许字符串作为_id类型,所以给出了什么?有什么想法吗?

更新:这里也有些奇怪。我想知道这是否是Mongoose的限制或错误,所以我进入了数据库并创建了两个文档:

> db.subnets.find().pretty()
{ "_id" : ObjectId("546bef63395b0694d51b5cbe"), "description" : "description!" }
{ "_id" : "mystring", "description" : "more description!" }

当我访问我的应用并尝试提取各自的观看次数时,我可以查看自定义_id文档的数据,但在尝试访问其他文档时会收到500内部服务器错误。

GET http://localhost:3000/somethings/546bef63395b0694d51b5cbe 500 (Internal Server Error)
GET http://localhost:3000/somethings/mystring 200 OK

1 个答案:

答案 0 :(得分:1)

问题最有可能是this.name - 看起来未定义。