[英]Nodejs MongoDB, findOneAndUpdate is not updating any data
我正在嘗試使用findOneAndUpdate()
更新我的 mongodb 數據。 它不返回任何錯誤。 錯誤為null
。 但它不會更新任何數據。 在控制台中,我收到此消息:
Mongoose: datas._findAndModify({ _id: undefined }, [], { '$set': { note: undefined, date: undefined, title: undefined }
我的架構:
var mongoose = require("mongoose")
var Schema = mongoose.Schema
var note = new Schema({
title:String,
date:String,
note:String
})
const Data = mongoose.model("Data", note)
module.exports = Data
服務器.js:
const express = require('express')
const mongoose = require('mongoose')
var app = express()
var Data = require('./notesSchema')
mongoose.connect('mongoDB://localhost/newDB',{
})
mongoose.connection.once("open", () => {
console.log("connected to DB!")
}).on("error", (error)=>{
console.log("failed to connect" + error)
})
app.get("/hi", (req,res)=>{
res.send("Hello World.")
})
// Create a NOTE
app.post("/create", (req, res)=> {
var note = new Data({
note: req.get("note"),
titile: req.get("title"),
date: req.get("date"),
})
note.save().then(() => {
if(note.isNew == false){
console.log("Saved data!")
res.json({response: "ok"});
}else{
console.log("Failed to save data")
}
})
})
// http://192.168.0.102:8081/create
var server = app.listen(8081, "192.168.0.102", ()=>{
console.log("server is running")
})
mongoose.set('debug', true)
// update a Note
app.post("/update", (req,res)=>{
Data.findOneAndUpdate({
_id: req.get("id")
}, {
title: req.get("title"),
date: req.get("date"),
note: req.get("note"),
},{new: true},(err)=>{
console.log("failed to update " + err)
})
res.send("Updated")
})
// fetch all Notes
app.get("/fetch", (req,res)=>{
Data.find({}).then((DBitems) => {
res.send(DBitems)
})
})
// Delete a Note
app.post("/delete", (req,res) =>{
Data.findOneAndRemove({
_id : req.get("id")
},(err) => {
console.log(err)
})
})
這里有什么問題?
您的 ID 可能為空。 正如@AdhamLucasdaSilvaOliveira 所說,請求有參數。
app.post('/update:id', (req, res) => {
Data.findOneAndUpdate({'_id': req.params.id, {dataset} })
})
如果 req.get('title') 為 null 嘗試使用req.body.title
我認為一個問題是在req.get()
因為請求通常有參數和查詢。 所以嘗試使用req.query.title
如果你傳遞這樣的標題: /example?title=cool
或者req.params.title
如果你傳遞這樣的標題: /example/cool
。
另一個問題在於:
app.post("/create", (req, res)=> {
var note = new Data({
note: req.get("note"),
->>> titile: req.get("title"),
因為在你的模式,第二場被命名為title
,而不是titile
。
這取決於您傳遞參數的位置。
1) If you pass params in the body with json:
var note = req.body.note;
2) If you pass params with route like /localhost:3000/update/params(id or note)
var note = req.params.note
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.