others - Mongoose: CastError: Cast to ObjectId failed for value “[object Object]” at path “_id”

我尝试创建一个路径来创建新的子对象,将它添加到children的父对象数组中,然后将子对象返回到请求者。我遇到的问题是,如果将字符串id传递给findById,node就会崩溃

TypeError : Object {} has no method'cast'

如果我尝试传入一个ObjectId,会得到

CastError : Cast to ObjectId failed for value " [object Object] " at path "_id"

以下是我的代码:


var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId; //Have also tried Schema.Types.ObjectId, mongoose.ObjectId

mongoose.connect('mongodb://user:password@server:port/database');

app.get('/myClass/:Id/childClass/create', function(request, result) {
 var id = new ObjectId(request.params.Id);
 MyClass.findById(id).exec( function(err, myClass) {
 if (err || !myClass) { result.send("error:" + err +"<br>" + JSON.stringify(id) || ("object '" + request.params.Id +"' not found:" + id)); return; }
 var child = ChildClass();
 myClass.Children.addToSet(child);
 myClass.save();
 result.send(child);
 });
});

如果我用路径"/myClass/51c35e5ced18cb901d000001/childClass/create",执行这个代码,这是代码的输出:

error : CastError : Cast to ObjectId failed for value " [object Object] " at path "_id" {"path":"51c35e5ced18cb901d000001 ","instance":"ObjectID","validators": [],"setters": [],"getters": [],"_index":null}

时间:

简短回答:使用mongoose.Types.ObjectId。


MyClass.findById(req.params.id)

mongoose.Types.ObjectId("51bb793aca2ab77a3200000d")

我收到这个错误CastError:Cast to ObjectId failed for value " [object Object] " at path "_id" after creating a schema, then modifying it and couldn't track it down. 我删除了collection中的所有文档,并且可以添加1个对象,但不能添加第二个对象。我最终在Mongo中删除了collection,并在Mongoose重新创建collection,可以工作了。

对于那些人被困在了问题,但是始终还是没法解决它: 我偶然发现了相同的错误,然后就找到了 _id字段是空的。

我说过的这儿 详细。? 到现在都没有找到解决方案除更改字段 _id不要对我ID字段这是一个dirty hack 。 我可能要以小文件Mongoose的错误报告。 任何帮助将不胜感激 !

编辑: 我更新了线程。 我提交工单,他们已确认丢失 _id问题。 它会是固定的4 。x 。x 版本中都有一个预发布版现在可用。 rc建议不要用于生产 !


{
[CastError: Cast to ObjectId failed for value"[object Object]" at path"_id"]
message: 'Cast to ObjectId failed for value"[object Object]" at path"_id"',
name: 'CastError',
type: 'ObjectId',
path: '_id'
value:
 [ { timestamp: '2014-07-03T00:23:45-04:00',
 date_start: '2014-07-03T00:23:45-04:00',
 date_end: '2014-07-03T00:23:45-04:00',
 operation: 'Deactivation' } ],
}

解释:我通过以下方式将数据从php发送到node.js API:


$history = json_encode(
array(
 array(
 'timestamp' => date('c', time()),
 'date_start' => date('c', time()),
 'date_end' => date('c', time()),
 'operation' => 'Deactivation'
)));

可以看到$history是一个包含数组的数组,这就是为什么猫鼬会尝试使用数组而不是Scheme.ObjectId(或任何其他数据类型)填充_id(或任何其他字段)的原因。以下工作:


$history = json_encode(
array(
 'timestamp' => date('c', time()),
 'date_start' => date('c', time()),
 'date_end' => date('c', time()),
 'operation' => 'Deactivation'
));

更新到Mongoose 4.0,问题已修复。

...