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

时间:2017-08-30 05:56:57

标签: node.js mongodb passwords username

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

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

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

中弹出此错误
  

"错误:在保存"。

之前,文档必须有_id

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

6 个答案:

答案 0 :(得分:20)

非常简单:

  1. 如果您在架构中明确声明了_id字段,则必须明确初始化
  2. 如果您尚未在架构中声明它,MongoDB将声明并初始化它。
  3. 您不能做的是将其置于架构中但不初始化它。它会抛出你正在谈论的错误

答案 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 jsGraphQL 的猫鼬,我已通过将 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
});