MongoDB - 错误:文档在保存之前必须有_id

问题描述 投票:9回答:4

我一直在为这个项目苦苦挣扎。我正在遵循一些在某些领域过时的教程,例如他们的Jquery版本对某些函数使用了完全不同的格式,我不得不做很多改变。但我认为我已经陷入了最后一个无法找到解决方案的重大问题。在我的Schema变量中,我有_id,用户名和密码类型

var UserSchema = new mongoose.Schema({
    _id: mongoose.Schema.ObjectId,
    username: String,
    password: String
}); 

但是当我尝试将新用户添加到我的应用程序时,它不会获得我应该获得的警报,而是弹出为[object Object]并且没有任何内容添加到数据库中。然后在mongo cmd中弹出此错误

“错误:文档在保存之前必须有_id”。

我已经尝试评论_id行,我得到了正确的消息,但我的数据库中仍然没有显示任何内容。

node.js mongodb passwords username
4个回答
22
投票

它非常简单:

  1. 如果已在架构中显式声明_id字段,则必须显式初始化它
  2. 如果您尚未在架构中声明它,MongoDB将声明并初始化它。

你不能做的是将它放在模式中但不初始化它。它会抛出你正在谈论的错误


1
投票

尝试下面的代码片段,我想将_id命名为userId,你也可以不用它。

var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;

var UserSchema = new Schema({
    username: String,
    password: String
});
UserSchema.virtual('userId').get(function(){
    return this._id;
});

1
投票

_id由MongoDb自动添加。

如果要在数据结构上保留_id,请确保正确初始化:

var obj = new UserSchema({ 
    "_id": new ObjectID(), 
    "username": "Bill", 
    "password" : "...." 
});

-2
投票

不要在模型中指定_id:mongoose.Schema.ObjectId。如果您省略_id,系统会创建id:

var UserSchema = new mongoose.Schema({    
    username: String,
    password: String
}); 
© www.soinside.com 2019 - 2024. All rights reserved.