2016-11-23 68 views
0

所以這是在控制檯中工作,但不寫入數據庫。當我重新啓動服務器時,數據只是重置。它從數據庫讀取就好了,只是沒有保存。我正在運行mongo shell,並明確地從中取出數據,而不是像我想要的那樣更新或創建數據。下面是我的server.js文件中的代碼:我的本地MongoDB實例沒有通過Express和Mongoose保存數據

var express = require('express'); 
    var mongoose = require('mongoose'); 
    var Schema = mongoose.Schema; 
    var bodyParser = require('body-parser'); 
    var app = express(); 

    mongoose.Promise = global.Promise; 
    mongoose.connect('mongodb://localhost:27017/food'); 


    //Allow all requests from all domains & localhost 
    app.all('/*', function(req, res, next) { 
     res.header("Access-Control-Allow-Origin", "*"); 
     res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept"); 
     res.header("Access-Control-Allow-Methods", "POST, GET"); 
     next(); 
    }); 

    app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({extended: false})); 


    var usersSchema = new Schema({ 
     _id: String, 
     id: String, 
     vote: Number 
    }); 

    var bkyes = mongoose.model('bkyes', usersSchema); 


    app.post('/bkyes', function(req, res, next) { 

    bkyes.find({}, function(err, foundObject) { 
     console.log(foundObject); //Print pre-update 
     var found = foundObject[0]; 
     found.vote = req.body.vote; //Passing in the number 5 here(was -1 before) 
     found.save(function(err) { 

      console.log(foundObject); //Print post-update 
     }); 
     }); 
    }); 


    app.listen(3000); 

    /* 
    The console.log pre-update: 
    [ { _id: '582b2da0b983b79b61da3f9c', id: 'Burger King', vote: -1 } ] 
                   ^
    The console.log post-update: 
    [ { _id: '582b2da0b983b79b61da3f9c', id: 'Burger King', vote: 5 } ] 
                   ^
    However this data does NOT write to the db and just resets when you restart the server!! 
    */ 
+0

檢查你'req.body.vote',這是一個數字嗎? – Khang

+0

它是從前端傳入的。正如你可以在底部的註釋部分看到的,它正在更新Mongo BSON,而不是將它保存到數據庫。當我檢查shell時,它並未真正寫入。 – jdev99

+0

使用findOneAndUpdate()而不是查找然後保存 – Sam

回答

0

foundObjects不受save()功能反正效果,所以日誌是一種無用的。

我不知道爲什麼你想找到bkyes中的每個文件並獲得第一個文件。你經常會發現一些有條件的文檔,通常是_id字段。

無論如何,這裏是與findOneAndUpdate()一個例子:

bkyes 
    .findOneAndUpdate({ 
    // Conditions 
    _id: '00001' 
    }, { 
    // Set which fields to update 
    vote: 5 
    }) 
    .exec(function(err, foundObject) { 
    if (err) { 
     // Error handler here 
    } 

    // Do something when update successfully 
    }); 

注意:foundObject是更新前的對象

+0

嗨,感謝您的回覆,Mongo文檔有點神祕。在4:16這個視頻裏,這個人成功地使用了foundObject.save(),所以這就是我從中獲得的地方。 https://youtu.be/5_pvYIbyZlU?t=4m16s另外,我發現價值是我接下來要處理的,我只想在此之前看到它的節省。讓我知道你的想法,我感謝你的意見。 – jdev99

+0

在那個視頻中,那個人使用'findOne()',它會返回一個對象,或者當你使用'find()'時它將返回一個數組。 Mongoose'save()'方法只適用於模型。 – willie17

+0

好吧,現在我正在使用'findOneAndUpdate()',現在記錄'foundObject'現在返回null ..我可能有語法錯誤的'findOneAndUpdate()',我會深入研究文檔,如果您有任何其他建議,請隨意射擊。 – jdev99

相關問題