Node.js Node JS如何将值保存到Mongo DB
我试图开发一个简单的网络应用程序,其中一个用户可以点茶,管理员用户可以看到这个订单。您能帮我解决我的问题吗: 我可以将tea添加到DB中,但它会消失,并且再次从0开始计数。我正在尝试只为DB中的一个用户做这件事。 非常感谢你的帮助 这是我的: app.js: 以下是我的用户模式:Node.js Node JS如何将值保存到Mongo DB,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图开发一个简单的网络应用程序,其中一个用户可以点茶,管理员用户可以看到这个订单。您能帮我解决我的问题吗: 我可以将tea添加到DB中,但它会消失,并且再次从0开始计数。我正在尝试只为DB中的一个用户做这件事。 非常感谢你的帮助 这是我的: app.js: 以下是我的用户模式: var mongoose = require("mongoose"); var passportLocalMongoose = require("passport-local-mongoose"); var User
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var UserSchema = new mongoose.Schema({
username: String,
password: String,
tea: {type: Number, default: 0},
coffee: {type: Number, default: 0}
});
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
这是我的html页面:
<h1>
Hello, user
</h1>
<button id="add_tea">Add tea</button>
<button id="add_coffee">Add coffee</button>
<script src="add_products.js"></script>
点击2次“添加茶”后在终端中输出:
再次单击
{ clickTime: 2019-12-23T17:58:31.675Z }
{ tea: 0,
coffee: 0,
_id: 5df9500dcacf170631a3ce72,
username: 'test2',
__v: 0 }
{ tea: 1,
coffee: 0,
_id: 5df9500dcacf170631a3ce72,
username: 'test2',
__v: 0 }
您只是更新文档,而不是将其保存到数据库中
find
命令从数据库中获取文档,所以更新后需要调用.save()
只需添加下面的行
app.post("/tea_added", function(req, res){
const click = {clickTime: new Date()};
console.log(click);
User.find({}, function(err, foundData) {
database = foundData[0];
console.log(foundData[0]);
foundData[0].tea = foundData[0].tea + 1;
//Add the below mentioned line
User.save(function (err) {
if(err) {
console.error('ERROR!');
}
});
});
})) 首先,为存储上次序列创建计数器文档。之后,为
tea的更新序列应用预保存钩子
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var CounterSchema = new mongoose.Schema({
slug: {type: String, default: 'tea'},
seq: {type: Number, default: 0}
});
var Counter = mongoose.model('Counter', CounterSchema);
const UserSchema = new mongoose.Schema({
username: String,
password: String,
tea: {type: Number, default: 0},
coffee: {type: Number, default: 0}
});
UserSchema.pre('save', function(next) {
var doc = this;
Counter.findByIdAndUpdate({_id: 'tea'}, {$inc: { seq: 1} }, function(error, counter) {
if(error)
return next(error);
doc.tea = counter.seq;
next();
});
});
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
请检查,这有助于您在一次DB调用中实现目标:
var mongoose = require("mongoose");
var passport = require("passport");
var bodyParser = require("body-parser");
var User = require("./models/user");
var LocalStrategy = require("passport-local");
var passportLocalMongoose = require("passport-local-mongoose");
mongoose.connect("mongodb://localhost/hairsalon_db");
var app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(require("express-session")({
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static('scripts'));
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post("/tea_added", function (req, res) {
const click = { clickTime: new Date() };
console.log(click);
/** 1) Let's say you get username of user
& order details here i.e; tea :1 && coffee : 2 like
Example object : req.body = {
username: 'myName',
coffee: 1,
tea: 2
};
(Or)
req.body = {
username: 'myName',
tea: 1
};
*/
const userName = req.body.username;
let inputValues = {};
inputValues.coffee = (req.body.coffee) ? req.body.coffee : 0
inputValues.tea = (req.body.tea) ? req.body.tea : 0
// `new: true` is to return newly updated document from DB. In case if no document matches with passed in username then o/p will be null.
User.findOneAndUpdate({ "username": userName }, { $inc: inputValues }, { new: true}).lean(true).exec((err, res) => {
if (err) { /** some logic or throw err */ console.error('DB Error') }
if (res) { /** Send success response */console.log('order added') }else{/** some logic or throw err */ console.error('unable to update/process order')}
});
});
您只需更新文档一次,但不将其保存到数据库find
命令刚从数据库中提取文档。@AlexeyN:它是否工作正常或仍然存在问题?@srinivasy试图实现您的解决方案,将返回消息。感谢添加此行没有帮助,因为存在TypeError:User.save不是函数。不知道为什么,因为我有我的用户模式
app.post("/tea_added", function(req, res){
const click = {clickTime: new Date()};
console.log(click);
User.find({}, function(err, foundData) {
database = foundData[0];
console.log(foundData[0]);
foundData[0].tea = foundData[0].tea + 1;
//Add the below mentioned line
User.save(function (err) {
if(err) {
console.error('ERROR!');
}
});
});
var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");
var CounterSchema = new mongoose.Schema({
slug: {type: String, default: 'tea'},
seq: {type: Number, default: 0}
});
var Counter = mongoose.model('Counter', CounterSchema);
const UserSchema = new mongoose.Schema({
username: String,
password: String,
tea: {type: Number, default: 0},
coffee: {type: Number, default: 0}
});
UserSchema.pre('save', function(next) {
var doc = this;
Counter.findByIdAndUpdate({_id: 'tea'}, {$inc: { seq: 1} }, function(error, counter) {
if(error)
return next(error);
doc.tea = counter.seq;
next();
});
});
UserSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", UserSchema);
var mongoose = require("mongoose");
var passport = require("passport");
var bodyParser = require("body-parser");
var User = require("./models/user");
var LocalStrategy = require("passport-local");
var passportLocalMongoose = require("passport-local-mongoose");
mongoose.connect("mongodb://localhost/hairsalon_db");
var app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(require("express-session")({
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static('scripts'));
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post("/tea_added", function (req, res) {
const click = { clickTime: new Date() };
console.log(click);
/** 1) Let's say you get username of user
& order details here i.e; tea :1 && coffee : 2 like
Example object : req.body = {
username: 'myName',
coffee: 1,
tea: 2
};
(Or)
req.body = {
username: 'myName',
tea: 1
};
*/
const userName = req.body.username;
let inputValues = {};
inputValues.coffee = (req.body.coffee) ? req.body.coffee : 0
inputValues.tea = (req.body.tea) ? req.body.tea : 0
// `new: true` is to return newly updated document from DB. In case if no document matches with passed in username then o/p will be null.
User.findOneAndUpdate({ "username": userName }, { $inc: inputValues }, { new: true}).lean(true).exec((err, res) => {
if (err) { /** some logic or throw err */ console.error('DB Error') }
if (res) { /** Send success response */console.log('order added') }else{/** some logic or throw err */ console.error('unable to update/process order')}
});
});