mongodb TypeError:db.collection(...).保存不是函数

mf98qq94  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(110)

我尝试使用html表单提交数据,并使用nodejs/expres crud操作将数据发送到我的mongodb数据库,但我收到错误:
TypeError:db.collection(...).保存不是函数
我有两个文件,server.js和index.html。
index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="/quotes" method="POST"> 
         <input type="text" placeholder="name" name="name">  
         <input type="text" placeholder="quote" name="quote">  
         <button type="submit">Submit</button>
    </form>
</body>
</html>

字符串
我的mongodb数据库是“notesDB”,集合是“quotes”server.js:

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const MongoClient = require('mongodb').MongoClient

var db

MongoClient.connect('mongodb+srv://username:[email protected]/notesDB', (err, database) => {
  if (err) return console.log(err)
  db = database.db('notesDB')
  app.listen(3000, () => {
    console.log('listening on 3000')
  })

})

app.use(bodyParser.urlencoded({extended: true}))

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html')
})

app.post('/quotes', (req, res) => {
    db.collection('quotes').save(req.body, (err, result) => {
      if (err) return console.log(err)
      console.log('saved to database')
      res.redirect('/')
    })
  })


标题中的错误有许多其他解决堆栈溢出的方法,最流行的是
这是你在项目中安装的mongodb版本错误。你应该在项目中运行npm install email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)--保存
当我尝试这个时,我的代码中有4个关键漏洞和多个其他错误,我意识到我应该使用最新的版本,所以我不喜欢这个解决方案。
我尝试的第二个解决方案是移动crud操作,即mongodb连接下的get和post,我尝试了这个方法,因为其他关于这个错误的帖子是这样构造的,这并没有改变任何东西:

MongoClient.connect('mongodb+srv://username:[email protected]/notesDB', (err, database) => {
  if (err) return console.log(err)
  db = database.db('notesDB')
  app.listen(3000, () => {
    console.log('listening on 3000')
  })
  
    app.use(bodyParser.urlencoded({extended: true}))

    app.get('/', (req, res) => {
        res.sendFile(__dirname + '/index.html')
    })

    app.post('/quotes', (req, res) => {
        db.collection('quotes').save(req.body, (err, result) => {
        if (err) return console.log(err)
        console.log('saved to database')
        res.redirect('/')
        })
    })

})


我读了更多关于使用客户端而不是数据库的信息,因此我用客户端替换了数据库,并尝试了这种方式,这导致了同样的错误。由于我从教程中获得了这段代码,我走了一个头,从他的github下载了代码的最终版本,并启动了项目,它工作了,因此我正在寻找为什么这不工作,因为它肯定应该是,代码是here,如果这有帮助的话,因为代码是如此相似,但实际上工作。
编辑:我得到的听力3000,其提交的形式,我得到的错误,只是为了澄清。

tag5nh1u

tag5nh1u1#

.保存()已被弃用。保存()您可以使用.insertOne()或.insertMany()或.updateOne({upsert:true})
您可以像下面这样编写代码,将.保存()替换为.insertOne()

app.post('/quotes', (req, res) => {
    db.collection('quotes').insertOne(req.body, (err, result) => {
      if (err) return console.log(err)
      console.log('saved to database')
      res.redirect('/')
    })
  })

字符串
对于进一步的CRUD操作,您可以遵循以下文档
https://www.mongodb.com/developer/quickstart/node-crud-tutorial/?_ga=2.210725788.862450187.1649763419-1339553468.1649528473&_gac=1.209527078.1649528473.EAIaIQobChMIt8KGr8yH9wIVg3ZgCh3-2gcdEAAYASABEgJH8vD_BwE

b1zrtrql

b1zrtrql2#

如果你想使用save()方法,你应该使用Mongoose而不是MongoDB。MongoDB没有任何保存方法。你可以使用insert()insertMany(),或者如果你更新了而不是save(),你可以简单地使用replaceOne()

相关问题