Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么需要猫鼬?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 为什么需要猫鼬?

Node.js 为什么需要猫鼬?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,使用猫鼬填充: 当我第一次创建文档时,mongoose强迫我为populate声明一个ref值,但在我的情况下,我还没有ref信息。当我试图创建一个新文档,同时提供一个空字符串时,我会进入我的开发者字段,我得到: {"message":"Cast to ObjectId failed for value \"\" at path \"developer\"","name":"CastError","type":"ObjectId","value":"","path":"developer"}

使用猫鼬填充:

当我第一次创建文档时,mongoose强迫我为populate声明一个ref值,但在我的情况下,我还没有ref信息。当我试图创建一个新文档,同时提供一个空字符串时,我会进入我的开发者字段,我得到:

{"message":"Cast to ObjectId failed for value \"\" at path \"developer\"","name":"CastError","type":"ObjectId","value":"","path":"developer"}
我通过猫鼬保存的对象:

var Project = {
  name: 'Coolproject',
  status: 'pending',
  developer: '',
  type: 'basic',
};

Project.create(req.body, function(err, project) {
  if(err) { return handleError(res, err); }
  return
});
我的模型:

var ProjectSchema = new Schema({
  name: String,
  status: {type:String, default:'pending'},
  developer:{type: Schema.Types.ObjectId, ref: 'User'},
  type:String
});
基本上,我需要稍后设置,但它不可能像这样接缝。目前,我的解决办法是在以后使用虚拟用户填充它,但这并不理想

想法

更新


意识到如果我提供像值55132a418b3cde5546b01b37这样的对象id,它将允许我保存文档。很奇怪。我猜它只是认为它可以找到文档继续移动。想知道为什么空白值不会出现这种情况。

您需要在模型中使用稀疏索引。 因此,有效的模型可以使developer等于零

var ProjectSchema = new Schema({
  name: String,
  status: {type:String, default:'pending'},
  developer:{type: Schema.Types.ObjectId, ref: 'User', sparse:true},
  type:String
});
看 和
有关其他信息,请参见错误消息中的说明。不能将空字符串保存在ObjectId的位置。该字段未列为“必需”,因此省略它并保存文档没有问题

代码更正:

// you can save this
var Project = {
    name: 'Coolproject',
    status: 'pending',
    type: 'basic',
};

我不明白你的意思。它不允许您在不为开发人员定义用户的情况下创建文档吗?或者,它不允许您在用户模型不存在的情况下定义模式。人口与此有何关联?这个问题看起来很像X/Y。啊,是的,非常正确。希望更新后更清晰一点。我希望以后能够保存引用,而不是在我最初创建父文档时。在创建新文档时是否会发生此错误?您说的是保存,但如果您正在保存,则表示您至少能够在某个时候创建文档。你能包括导致这个错误的代码吗?我添加了我的模型以使它更清晰。是的,这是关于新文档创建的,它不允许我在不提供价值的情况下创建它。当我为文档提供id时效果很好,但当我将其留空时效果就不好了。您能否添加尝试创建/保存文档的部分并获取错误信息?你是说var p=新项目;p、 保存;失败?问题中定义的文档应该仍然能够有未定义的开发人员,而无需创建稀疏索引。