[英]Issue with updating a document in MongoDB
我在更新插入數據庫的文檔時發現問題。 我已經創建了一個網頁,我可以在其中將文檔插入到數據庫中,並在同一頁面上檢索和顯示它。 但是,我無法更新現有文檔。
當我嘗試使用objectID
更新文檔時,數據沒有得到更新。
我希望得到幫助或建議。
僅供參考:我在這里使用的數據庫是'iot'
,集合是: 'metadata'
我是 JS 和 MongoDB 的初學者。 我需要一些幫助。
var express = require('express'); var router = express.Router(); var assert = require('assert'); var url = "mongodb://localhost:27017"; const MongoClient = require('mongodb').MongoClient; const client = new MongoClient(url); const dbName = 'iot'; /* GET home page. */ router.get('/', function(req, res, next) { res.render('index'); }); router.get('/get-data', function(req, res, next){ var resultArray = []; MongoClient.connect(url, function(err, client){ assert.equal(null, err); const db = client.db(dbName); var cursor = db.collection('metadata').find(); cursor.forEach(function(doc, err) { assert.equal(null, err); resultArray.push(doc); }, function(){ client.close(); res.render('index', {items: resultArray}); }); }); }); router.post('/insert', function(req, res, next) { var item = { title: req.body.title, content: req.body.content, author: req.body.author } MongoClient.connect(url, function(err, client){ assert.equal(null, err); const db = client.db(dbName); db.collection('metadata').insertOne(item, function(err, result){ assert.equal(null, err); console.log('Item inserted'); client.close(); }); }); res.redirect('/'); }); router.post('/update', function(req, res, next) { var item = { title: req.body.title, content: req.body.content, author: req.body.author }; var id = req.body.id; MongoClient.connect(url, function(err, client){ assert.equal(null, err); const db = client.db(dbName); db.collection('metadata').updateOne({"_id": objectId(id)}, {$set: item}, function(err, result) { assert.equal(null, err); console.log('Item updated'); db.close(); }); }); ///res.redirect('/'); }); router.post('/delete', function(req, res, next) { var id = req.body.id; mongo.connect(url, function(err, db) { assert.equal(null, err); db.collection('metadata').deleteOne({"_id": objectId(id)}, function(err, result) { assert.equal(null, err); console.log('Item deleted'); db.close(); }); }); }); module.exports = router;
<h1>HOME DASHBOARD </h1> <section class="insert"> <h3>Insert Data</h3> <form action="/insert" method="post"> <div class="input"> <label for="title">Title</label> <input type="text" id="title" name="title"> </div> <div class="input"> <label for="content">Content</label> <input type="text" id="content" name="content"> </div> <div class="input"> <label for="author">Author</label> <input type="text" id="author" name="author"> </div> <button type="submit">INSERT</button> </form> </section> <section class="get"> <h3>Get Data</h3> <a href="/get-data">LOAD DATA</a> <div class="gfg"> <div> {{# each items }} <article class="item"> <div>Title: {{ this.title }}</div> <div>Content: {{ this.content }}</div> <div>Author: {{ this.author }}</div> <div>ID: {{ this._id }}</div> </article> {{/each}} </div> </div> </section> <section class="update"> <h3>Update Data</h3> <form action="/update" method="post"> <div class="input"> <label for="id">ID</label> <input type="text" id="id" name="id"> </div> <div class="input"> <label for="title">Title</label> <input type="text" id="title" name="title"> </div> <div class="input"> <label for="content">Content</label> <input type="text" id="content" name="content"> </div> <div class="input"> <label for="author">Author</label> <input type="text" id="author" name="author"> </div> <button type="submit">UPDATE</button> </form> </section> </section> <section class="delete"> <h3>Delete Data</h3> <form action="/delete" method="post"> <div class="input"> <label for="id">ID</label> <input type="text" id="id" name="id"> </div> <button type="submit">DELETE</button> </form> </section>
嘗試導入 ObjectID ,我在那里看不到它
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url, {useUnifiedTopology: true});
var ObjectID = require('mongodb').ObjectID;
// In your request
{ "_id": ObjectID(req.body.id)}, // Filter
//in your code
client.connect(function(err, client){
assert.equal(null, err);
const db = client.db(dbName);
db.collection('metadata').updateOne({ "_id": ObjectID(req.body.id)}, {$set: item}, function(err, result) {
assert.equal(null, err);
console.log('Item updated');
db.close();
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.