我正在嘗試為特定用戶創建一個地方的新實體。當我查看我的 MongoDB Atlas 時,每個用戶的“_id”值實際上是唯一的。當我在資料庫中有一個用戶實體時,我可以為該用戶創建任意數量的位置。創建新用戶時出現問題,我無法再為任一用戶創建任何新位置。
這是我在前端遇到的錯誤:

地方-controllers.js
const { validationResult } = require('express-validator');
const mongoose = require('mongoose');
const getCoordsFromAddress = require('../util/location');
const HttpError = require('../models/http-error');
const Place = require('../models/place');
const User = require('../models/user');
const createPlace = async (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return next(
new HttpError('Invalid inputs passed, please check your data.', 422)
);
}
const { title, description, address, creator } = req.body;
let coordinates;
try {
coordinates = await getCoordsFromAddress(address);
} catch (error) {
return next(error);
}
const createdPlace = new Place({
title,
description,
address,
location: coordinates,
image: req.file.path,
creator,
});
let user;
try {
user = await User.findById(creator);
} catch (err) {
const error = new HttpError(
'Creating place failed, please try again.',
500
);
return next(error);
}
if (!user) {
const error = new HttpError('Could not find user for provided id.', 404);
return next(error);
}
console.log(user);
//THIS SEEMS TO BE THE POINT WHERE THE CODE FAILS
try {
const session = await mongoose.startSession();
session.startTransaction();
await createdPlace.save({ session: session });
user.places.push(createdPlace);
await user.save({ session: session });
await session.commitTransaction();
} catch (err) {
console.log(err);
const error = new HttpError(
'Creating place failed, please try again.',
500
);
return next(error);
}
res.status(201).json({ place: createdPlace });
};
然后這里是架構:
地方.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const placeSchema = new Schema({
title: { type: String, required: true },
description: { type: String, required: true },
image: { type: String, required: true }, //url for a database
address: { type: String, required: true },
location: {
lat: { type: Number, required: true },
lng: { type: Number, required: true },
},
creator: { type: mongoose.Types.ObjectId, required: true, ref: 'User' },
});
module.exports = mongoose.model('Place', placeSchema);
最后是錯誤代碼:
Error: User validation failed: _id: Error, expected `_id` to be unique. Value: `616d8a452c5215f9fafb6052`
at ValidationError.inspect (/Users/james/Desktop/Full Stack Udemy Course (MERN)/Fullstack-app/server/node_modules/mongoose/lib/error/validation.js:48:26)
at internal/per_context/primordials.js:23:32
at formatValue (internal/util/inspect.js:774:19)
at inspect (internal/util/inspect.js:336:10)
at formatWithOptionsInternal (internal/util/inspect.js:2006:40)
at formatWithOptions (internal/util/inspect.js:1888:10)
at console.value (internal/console/constructor.js:313:14)
at console.log (internal/console/constructor.js:348:61)
at createPlace (/Users/james/Desktop/Full Stack Udemy Course (MERN)/Fullstack-app/server/controllers/places-controllers.js:112:13)
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
errors: {
_id: ValidatorError: Error, expected `_id` to be unique. Value: `616d8a452c5215f9fafb6052`
at validate (/Users/james/Desktop/Full Stack Udemy Course (MERN)/Fullstack-app/server/node_modules/mongoose/lib/schematype.js:1277:13)
at /Users/james/Desktop/Full Stack Udemy Course (MERN)/Fullstack-app/server/node_modules/mongoose/lib/schematype.js:1252:24
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
properties: [Object],
kind: 'unique',
path: '_id',
value: new ObjectId("616d8a452c5215f9fafb6052"),
reason: undefined,
[Symbol(mongoose:validatorError)]: true
}
},
_message: 'User validation failed'
}
任何幫助將不勝感激,我已經為此撓頭一段時間了。
uj5u.com熱心網友回復:
由@JeremyThille 提供回答。
mongoose-unique-validator有一個錯誤,因此當您有多個用戶時,它會檢測到_id另一個架構中的參考。然后它決定 _id 不再是唯一的并且不會讓任何用戶發布新檔案。
目前的解決辦法是重新卷mongoose和mongoose-unique-validator以v^5.11.13和v^2.0.3分別。
此處發布了當前的 GitHub 問題。
https://github.com/blakehaswell/mongoose-unique-validator/issues/131
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330480.html
標籤:javascript 节点.js 表达 猫鼬 mongodb-图集
下一篇:UWP應用程式錯誤:“無效的系結路徑'Application.Current':在型別'MainPage'上找不到屬性'Application
