我的本地MongoDB实例没有通过Express和Mongoose保存数据
所以这是在控制台中工作,但不写入数据库。当我重新启动服务器时,数据只是重置。它从数据库读取就好了,只是没有保存。我正在运行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!!
*/
的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
是更新前的对象。
嗨,感谢您的回复,Mongo文档有点神秘。在4:16这个视频里,这个人成功地使用了foundObject.save(),所以这就是我从中获得的地方。 https://youtu.be/5_pvYIbyZlU?t=4m16s另外,我发现价值是我接下来要处理的,我只想在此之前看到它的节省。让我知道你的想法,我感谢你的意见。 – jdev99
在那个视频中,那个人使用'findOne()',它会返回一个对象,或者当你使用'find()'时它将返回一个数组。 Mongoose'save()'方法只适用于模型。 – willie17
好吧,现在我正在使用'findOneAndUpdate()',现在记录'foundObject'现在返回null ..我可能有语法错误的'findOneAndUpdate()',我会深入研究文档,如果您有任何其他建议,请随意射击。 – jdev99
检查你'req.body.vote',这是一个数字吗? – Khang
它是从前端传入的。正如你可以在底部的注释部分看到的,它正在更新Mongo BSON,而不是将它保存到数据库。当我检查shell时,它并未真正写入。 – jdev99
使用findOneAndUpdate()而不是查找然后保存 – Sam