Tag: mongodb

如何使用promises链接mongoose查询?

嘿家伙我是初学者,我正在我的第一个快速和mongo应用程序,但我不知道如何链接查询与JavaScript的承诺,使其工作作为同步查询。 请帮我链接这些mongoose的查询。 /* POST Register User */ router.post('/register',function(req,res,next){ let user = req.body; //checking for empty field in a form for(let key in user){ if(user[key] === ""){ return next(mid.error("All fields are required to fill")); } } User.findOne({username:user.username}) .exec(function(err,user){ if(err){ return next(mid.error("Something went wrong")); } if(user){ return next(mid.error("Username already exist")); } }); User.findOne({email:user.email}) .exec(function(err,user){ if(err){ return next(mid.error("Something […]

Mongoose – 函数内.find方法不传递结果

如何将函数的结果成功传递给.find方法? 如果用户提交了一个非空string,我希望通过body-parser传递的参数被用作键“name”的值。 如果用户提交了一个空string,那么空的对象应该被传递给.find方法。 函数console.log工作。 如果我提交一个空string,然后“空querydb”被打印到控制台。 同样,如果我提交任何其他string,然后正确地打印到控制台。 我如何将req.body.querydb作为值传递给'name'键? HTML <form method="POST" action="form_query"> <input type="textarea" name="querydb"> <br><br> <button> Query </button> </form> .JS router.post('/form_query', function(req,res) { someModel.find(function(err,results){ if(!req.body.querydb){ console.log("empty querydb") return {} } else { console.log(req.body.querydb) return {name:req.body.querydb} } }).exec(function(err, result) { if (err) { send(err) } else { console.log('omg') } 非常感谢 !

如何与mongoose一起执行sorting和限制查询?

我有一个与节点写下来的方法来从集合中查询 query: function (model, conditon, options) { console.log(conditon, options); return new Promise(function (resolve, reject) { options = options || {}; model.find(conditon, {}, options).exec(function (error, data) { if (error) reject(error); resolve(data); }) }) } 我想为下面的查询获取数据, db.getCollection('_event').find({}).sort({'metadata.popularity': 1}).limit(10) 我应该如何修改上述方法来支持这个查询? 这是我如何从另一个文件调用查询function, dbService.query(eventModel, { 'eventId': idRetrieved }, {}); }).then(data => dbService.disconnectDb(data)) .then(data => callback(data)) .catch((error) => { dbService.disconnectDb(error).then(error => […]

NodeJS与mongoDB JSONFormat问题

我是NodeJS和MongoDb的新手。 我正在面对一个关于jsonObject的问题。 第1步:我已经在我的Ubuntu 16.04系统中成功安装了NodeJS和MongoDB。 第2步:我在我的项目文件夹中创build了包含package.json文件的所有服务器设置。 第3步:我创build了server.js文件如下。 server.js文件 express = require('express'), routes = require('./api/routes/todoListRoutes'); mongoose = require('mongoose'), Task = require('./api/models/todoListModels'), bodyParser = require('body-parser'); app = express(), port = process.env.PORT || 3000, mongoose.Promise = global.Promise; mongoose.connect('mongodb://localhost/Tododb'); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); routes(app); app.listen(port); console.log('todo list RESTful API server started on: ' + port); 然后我创build了用于存储logging的模型文件。 todoListModels.js 'use strict'; […]

用笑话嘲笑mongoose模型

我试图用jest来嘲笑mongoose模型,但越来越Cannot create property 'constructor' on number '1'错误的Cannot create property 'constructor' on number '1' 。 我能够通过创build具有以下2个文件的项目来重现该问题。 有没有办法用jest模仿mongoose模型? ./model.js const mongoose = require('mongoose') const Schema = mongoose.Schema const schema = new Schema({ name: String }) module.exports = mongoose.model('Test', schema) ./model.test.js jest.mock('./model') const Test = require('./model') // Test.findOne.mockImplementation = () => { // … // } 错误: FAIL […]

如果文档的_id已经存在,如何将数组元素推送到数组,如果_id不存在,则创build新文档?

我使用Node.js , mongoose , mongodb , express和angular 。 我正在一个mongoose模型中保存一个调查答复。 很多人会提交特定调查的回复。 当第一个人提交调查答复时,我想为该调查创build一个新文档。 当第二,第三……等人提交同一调查答复时,我想添加数组元素只在以下模式的答复arrays。 当第一个人提交新调查答复时,我想为新调查创build一个新文档。 我怎样才能用mongoose做到这一点? 我在Mongoose.js中发现了类似的问题:如何实现创build或更新? 。 但是,在这里我想推新回复到下一个数组索引的答复[]如果find_id,否则创build一个新的文档 mongoose模型 : var mongoose = require("mongoose"); var Schema = mongoose.Schema; var MCQReplySchema = new Schema({ _id : String, surveyname: String, replies :[{ replierId : String, answers : [{ questionId : String, answer : String }] }] }); module.exports=mongoose.model('MCQReply',MCQReplySchema); […]

在expressjs中与Nodemailer错误?

我正在使用Nodemailer来设置忘记的密码function。 出于某种原因,我的代码被挂在smtpTrans.sendMail部分。 我正确设置了Nodemailer吗? 更新:看看下面的完整代码,包括async.waterfall代码 app.post('/forgot', function(req, res, next) { async.waterfall([ function(done) { crypto.randomBytes(20, function(err, buf) { var token = buf.toString('hex'); done(err, token); }); }, function(token, done) { User.findOne({ email: req.body.email }, function(err, user) { if (!user) { console.log('error', 'No account with that email address exists.'); return res.redirect('/forgot'); } console.log('step 1') user.resetPasswordToken = token; user.resetPasswordExpires = […]

在MongoDB中更新一个集合

我正在尝试更新我的collections基础上,如果我find一个值。 我的保存function看起来像这样` router.post('/savePage', function (req, res) { var page = req.body.page; var query = {'pageId': page.pageId}; var paged = new pagedb(page); pagedb.find(query, function (err, result) { if(err) return console.error(err); if(result.length > 0){ pagedb.update({'pageId': page.pageId}, page ); res.send('updated') } else{ paged.save(function (err) { if (err) { console.log('error saving page!'); throw err; }; res.send('saved'); }); } }); […]

如何从mongoDb过滤最近10天的logging?

var require = require('moment'); var today = new Date(); var dd = today.getDate(); var mm = today.getMonth()+1; //January is 0! var yyyy = today.getFullYear(); if(dd<10) { dd='0'+dd } if(mm<10) { mm='0'+mm } today = yyyy+'/'+mm+'/'+dd; console.log(today); videofiles.find({date:{$lte:'today'}} 上面提到的是我的代码..下面是我的Db值..我没有如何过滤从MongoDB的最近10天的logging。 我已经提到过滤date的值小于或等于今天,但我真的需要过滤最后10天的logging,我是新来的mongo分贝和node.js videofiles指的是我的collections在videofiles的名称。 "date": "2017/03/10", "is_deleted": 0, "filemimeType": "audio/mp3", "emotionCount": 0, "originalname": "1489042167918-1489040146195-SampleAudio_0.5mb (1).mp3", "updatedAt": "2017-03-10T05:54:34.032Z", "isUserLiked": 0, […]

当mongoose模型被实例化时,应用程序变慢

我正在开发购物车,作为我学习的一部分。 我面临的问题是,每当物品添加到购物车时,装载时间将大大增加(基准如下),并在购物车为空时恢复正常。 基准 当购物车是空的时候:加载时间低于1s。 GET / 304 154.242 ms – – GET /stylesheets/bootstrap.css 304 81.079 ms – – GET /stylesheets/style.css 304 79.363 ms – – GET /fonts/font-awesome/css/font-awesome.min.css 304 84.550 ms – – GET /product/58c179fb2148643f5865d4ca/image 304 86.347 ms – – GET /product/58c151f95b18373990f1c714/image 304 113.943 ms – – GET /product/58c17c9e32f18e2eb86fbd44/image 304 120.220 ms – – GET /product/58c17ced9697ec3e44bba381/image […]