我一直在为这个项目苦苦挣扎。我正在遵循一些在某些领域过时的教程,例如他们的Jquery版本对某些函数使用了完全不同的格式,我不得不做很多改变。但我认为我已经陷入了最后一个我无法找到解决方案的重大问题。在我的Schema变量中,我有_id,用户名和密码类型
var UserSchema = new mongoose.Schema({
_id: mongoose.Schema.ObjectId,
username: String,
password: String
});
但是当我尝试将新用户添加到我的应用程序时,它不会获得我应该获得的警报,而是弹出为[object Object]并且没有任何内容添加到数据库中。然后在mongo cmd
中弹出此错误"错误:在保存"。
之前,文档必须有_id
我已尝试评论_id行,我收到了正确的消息,但我的数据库中仍未显示任何内容。
答案 0 :(得分:20)
非常简单:
您不能做的是将其置于架构中但不初始化它。它会抛出你正在谈论的错误
答案 1 :(得分:3)
您可以在不使用_id的情况下编写模型,这样它将自动生成
或
您可以使用.init()初始化数据库中的文档。
赞:
"ab"
然后
const mongoose = require('mongoose');
const UserSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
username: String,
password: String
})
module.exports = mongoose.model('User', UserSchema);
答案 2 :(得分: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;
});
答案 3 :(得分:0)
就我而言,我在方案末尾意外地得到了以下内容。删除有效的方法:
{ _id: false }
答案 4 :(得分:0)
如果您使用带有 nest js
和 GraphQL
的猫鼬,我已通过将 id
更改为 _id
并删除其上方的 @prop
甚至id
问题的空值已经消失。 example on github
import { ObjectType, Field, Int, ID } from '@nestjs/graphql';
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import { User } from 'src/user/entities/user.entity';
import * as mongoose from 'mongoose';
export type SchoolDocument = School & Document;
@ObjectType()
@Schema()
export class School {
@Prop()//remove this
@Field(() => ID,{ nullable: true })
_id: string;
@Prop()
@Field(() => String,{ nullable: true })
name: string;
@Field(()=>[User],{nullable:true})
users:User[];
}
export const SchoolSchema= SchemaFactory.createForClass(School);
答案 5 :(得分:-2)
请勿在模型中指定_id:mongoose.Schema.ObjectId。如果您像这样忽略_id,系统将创建ID:
var UserSchema = new mongoose.Schema({
username: String,
password: String
});