簡體   English   中英

在 MongoDB 中更新文檔的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM