Mongoose findOneAndUpdate 不更新也不抛出错误
Mongoose findOneAndUpdate don´t update and don´t throw an error
我在 mongodDB 集群上的数据库中存储了两个文档 。所以基本上一个电线杆就像一个用户团队。我想要的是每次当用户想要加入一个杆时,他的名字将被推入一个成员数组,所以我在 express 中创建了一个嵌套路由来执行此操作,结构将是 /poles/:poleid/adduser/:即使我尝试使用 $addToSet 而不是 $push,userid 和我也遇到了问题。所以我的问题是猫鼬不会抛出错误并且不会更新并且控制台日志“已成功修补极点”。
这是我的两个模型
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const Pole = new Schema({
name: {
type: String,
default: "",
},
members: [{
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String,
role: String,
joined : {
type : Date,
default : () => Math.floor(Date.now() / 1000)
} ,
approved : {
type : Boolean,
default : false
}
}],
},
{ timestamps: true });
module.exports = mongoose.model("Pole", Pole);
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const passportLocalMongoose = require("passport-local-mongoose");
const Session = new Schema({
refreshToken: {
type: String,
default: "",
},
});
const User = new Schema({
firstName: {
type: String,
default: "",
},
lastName: {
type: String,
default: "",
},
email: {
type: String,
default: "",
},
authStrategy: {
type: String,
default: "local",
},
socialAccounts : [{
type: String,
default: "",
}],
pole: {
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Pole"
},
name: String,
},
// many to many relationship
Project: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Project"
},
name: String,
}],
Event: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Event"
},
name: String,
}],
Training: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Training"
},
name: String,
}],
Task: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Task"
},
name: String,
}],
refreshToken: {
type: [Session],
},
},
{
timestamps: {
createdAt: 'created_at', // Use `created_at` to store the created date
updatedAt: 'updated_at' // and `updated_at` to store the last updated date
}
}
);
//Remove refreshToken from the response
User.set("toJSON", {
transform: function (doc, ret, options) {
delete ret.refreshToken;
return ret;
},
});
User.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", User);
这是我的电线杆路线
var express = require('express');
var router = express.Router();
var addUserRouter = express.Router();
var Pole = require("../models/pole");
var User = require("../models/user");
addUserRouter.route("/:userid")
.put((req, res)=>{
const poleid = req.poleid ;
console.log(`pole id is fetched from server as ${poleid}`)
const userid = req.params.userid ;
console.log(`pole id is fetched from server as ${userid}`)
let username = null;
User.findOne({_id: userid}, (err, foundUser)=>{
if(foundUser){
console.log(`firstname is fetched from server as ${foundUser.firstName}`);
console.log(`lastname id is fetched from server as ${foundUser.lastName}`);
username = `${foundUser.firstName} ${foundUser.lastName}`
}else{console.log("No username matching that id was found.");}
});
Pole.findOneAndUpdate(
{id: poleid},
{$push: { members: {
id : req.params.userid,
name : username,
role : "member",
} }},
{useFindAndModify:false},
(err)=>{
(!err)? console.log("Successfully patched pole."):console.log(err);
}
);
});
router.use('/:poleid/adduser', (req, res,next) => {
req.poleid = req.params.poleid;
next();
},addUserRouter);
甚至当我尝试记录我的反应获取响应时,我什么也没有得到,当我停止服务器时,我得到了
PUT http://localhost:8081/poles/6267fce2a05b99e4fe4687eb/adduser/625f63a90b054a02b75a05a4/ net::ERR_CONNECTION_REFUSED
fetch(process.env.REACT_APP_API_ENDPOINT + `poles/${poleid}/adduser/${userid}/`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
}).then(async (response) => {
console.log(response);
if (response.ok) {
console.log("successfuly sent")
}
}).catch(err => {
<p>{err}</p>
})
感谢你们的所有评论,这是我在 findOneAndUpdate id 中使用的过滤器而不是 _id,所以正确的形式是
Pole.findOneAndUpdate(
{_id: poleid},
{$push: { members:...
我在 mongodDB 集群上的数据库中存储了两个文档
这是我的两个模型
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const Pole = new Schema({
name: {
type: String,
default: "",
},
members: [{
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String,
role: String,
joined : {
type : Date,
default : () => Math.floor(Date.now() / 1000)
} ,
approved : {
type : Boolean,
default : false
}
}],
},
{ timestamps: true });
module.exports = mongoose.model("Pole", Pole);
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const passportLocalMongoose = require("passport-local-mongoose");
const Session = new Schema({
refreshToken: {
type: String,
default: "",
},
});
const User = new Schema({
firstName: {
type: String,
default: "",
},
lastName: {
type: String,
default: "",
},
email: {
type: String,
default: "",
},
authStrategy: {
type: String,
default: "local",
},
socialAccounts : [{
type: String,
default: "",
}],
pole: {
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Pole"
},
name: String,
},
// many to many relationship
Project: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Project"
},
name: String,
}],
Event: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Event"
},
name: String,
}],
Training: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Training"
},
name: String,
}],
Task: [{
id:{
type: mongoose.Schema.Types.ObjectId,
ref: "Task"
},
name: String,
}],
refreshToken: {
type: [Session],
},
},
{
timestamps: {
createdAt: 'created_at', // Use `created_at` to store the created date
updatedAt: 'updated_at' // and `updated_at` to store the last updated date
}
}
);
//Remove refreshToken from the response
User.set("toJSON", {
transform: function (doc, ret, options) {
delete ret.refreshToken;
return ret;
},
});
User.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", User);
这是我的电线杆路线
var express = require('express');
var router = express.Router();
var addUserRouter = express.Router();
var Pole = require("../models/pole");
var User = require("../models/user");
addUserRouter.route("/:userid")
.put((req, res)=>{
const poleid = req.poleid ;
console.log(`pole id is fetched from server as ${poleid}`)
const userid = req.params.userid ;
console.log(`pole id is fetched from server as ${userid}`)
let username = null;
User.findOne({_id: userid}, (err, foundUser)=>{
if(foundUser){
console.log(`firstname is fetched from server as ${foundUser.firstName}`);
console.log(`lastname id is fetched from server as ${foundUser.lastName}`);
username = `${foundUser.firstName} ${foundUser.lastName}`
}else{console.log("No username matching that id was found.");}
});
Pole.findOneAndUpdate(
{id: poleid},
{$push: { members: {
id : req.params.userid,
name : username,
role : "member",
} }},
{useFindAndModify:false},
(err)=>{
(!err)? console.log("Successfully patched pole."):console.log(err);
}
);
});
router.use('/:poleid/adduser', (req, res,next) => {
req.poleid = req.params.poleid;
next();
},addUserRouter);
甚至当我尝试记录我的反应获取响应时,我什么也没有得到,当我停止服务器时,我得到了 PUT http://localhost:8081/poles/6267fce2a05b99e4fe4687eb/adduser/625f63a90b054a02b75a05a4/ net::ERR_CONNECTION_REFUSED
fetch(process.env.REACT_APP_API_ENDPOINT + `poles/${poleid}/adduser/${userid}/`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
}).then(async (response) => {
console.log(response);
if (response.ok) {
console.log("successfuly sent")
}
}).catch(err => {
<p>{err}</p>
})
感谢你们的所有评论,这是我在 findOneAndUpdate id 中使用的过滤器而不是 _id,所以正确的形式是
Pole.findOneAndUpdate(
{_id: poleid},
{$push: { members:...