Articles of mongoose

mongooseerror handling

我试图做一些validation用户input使用Express和Mongoose。 以前,我在用户模型的“密码”字段上直接设置了“最小长度”validation程序。 它将检查input的密码string是否足够长,如果不是,则会将其传递给尝试保存用户时创build的ValidationError对象。 这将被发回给用户,并显示在适当的表单域。 但是现在我已经实现了哈希,盐和encryption,这不能正常工作。 散列版本的密码远远长于原始密码。 所以我想我可以做这样的事情: exports.createNewUser = function(req, res, next){ var user = new User({ email : req.body.email , name : req.body.name }) , minLength = Validator.minLength(req.body.password); if (!minLength) return next(new Error('Password aint right length')); user.setPassword(req.body.password); user.save(function(err){ if (!err) return res.redirect('/'); else { console.log('error saving usr', err); err['body'] = req.body; return res.render('user/register', err); […]

Mongoose:在一个JSON对象中使用$ in操作符

我是Nodejs和mongodb的新手。 我正在尝试为以下情况获取数据。 考虑3个模式如下Profile模式 var ProfileSchema = new Schema({ username: {type: String, match: /^[a-zA-Z0-9_.-]+$/, unique: true}, name: String}); 文章架构 var PostsSchema = new Schema({ profileid: {type: ObjectId, ref: 'Profile'}, message: {type: String, match: /^.{1,160}$/} }); 遵循架构 var FollowSchema = new Schema({ profileid: {type: ObjectId, ref: 'Profile'}, followingid: {type: ObjectId, ref: 'Profile'}}); 这与Twitter层次结构类似。 要获得我的追随者的所有post,我尝试了以下 Follows.find({'profileid' : '500d18823e792d8814000001'}).select('followingid […]

会话pipe理,Node + Express和Mongoose模式对象

我正在使用Node.js + Express + Mongoose,并使用Mongoose Schema来存储“会话”数据。 同时,我正在使用“connect-mongodb”进行会话pipe理(本地驱动程序)。 直到今天,我已经意识到我有多余的function。 所以,我试图将我的Schema对象添加到“req.session”。 它似乎工作,但是我在下一个请求中释放了我的Schema对象的Moongosefunction。 我考虑的一个select是存储在'req.session'中的对象的id,然后使用Mongoose来检索它。 我考虑的另一个select是用Mongoose会话pipe理器replace“connect-mongoose”。 你可以帮我做决定,并推荐一个方法。 更具体地说,如果我使用Mongoose解决scheme,是否可以解决与我的Schema对象失去Mongoosefunction的问题? TIA

在Mongoose.js v3中进行版本控制

我知道在Mongoose中版本化主要是为了避免子文档数组的问题。 但是,是否也可以使用该function来避免对文档的更新发生冲突? 即两个用户同时更新同一个文档。 理想情况下,我想要做的是这样的: 使用find()检索文档,检查版本是否与预期的版本匹配(由If-Match头中的客户端发送)。 如果是这样,继续更新文档。 在save()上,如果版本从(1)开始改变,则失败。 如果我把setTimeout()放在1和2之间,那么在3之前手动更新__v ,保存仍然成功。 我认为这是因为在这种情况下,Mongoose不认为有必要在更新中包含版本子句。 我也试着在save()之前调用increment ()。 我认为这将增加在保存操作的版本,但它似乎是增加版本,然后保存抱怨它不匹配什么是在数据库(这显然不会)。 我最好用自己的中间件来实现版本控制吗?

Mongoose报告成功写作,数据库中没有任何东西

mongoose成功callback正在运行,但没有出现在我的数据库,当我通过控制台与Mongo交互。 任何人都可以帮助为什么什么都没有出现在数据库? app.js var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path') , mongoose = require('mongoose'); var app = express(); var TimesheetsController = require(__dirname + '/controllers/timesheets'); var UsersController = require(__dirname + '/controllers/users'); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); […]

结构推荐

我尝试为我的nodejs / express / mongoDB应用程序find一个好的目录结构。 目前,我使用本机mongodb驱动程序,它感觉不错,但速度很快,但是在定义适当的结构时受到限制…当MVC是快速/节点定义合适的db模型的方法并不那么容易。 尽pipemongoose及其图案的概念会使模型的实际devise变得容易,但我并不是那种在我的堆栈之上的另一层的粉丝……它感觉有点臃肿。 我寻找一个替代scheme,发现在本地驱动程序顶部是一个薄包装的mongoskin,但增加了一些function,以支持MVC-ish模式。 总的来说,我发现这对其他人来说也是一个普遍的问题。 我欣赏链接中提出的想法: https : //stackoverflow.com/a/8428281/1055685 不过,模型目录里面的查询并不是真正的MVC(就像评论中提到的那样) – 我不喜欢它… 明确的MVC演示不是那么有用…你在那里find了一些启发吗? 你推荐遵循哪种模式(如果MVC是推荐模型是真正的问题)? 你一般推荐蒙古人吗?

Moongose:按mathsorting,在string数组中search多个值

你好同胞SO用户, 我遇到了一些先进的mongoose查询,我根本无法从文档中找出答案。 首先,我想按一些math来sorting。 基本上我想能够通过两个对象的价格差异进行sorting。 我有“价格”和“旧价格”,其中包含基本的数字值。 然后,我想减去他们,并以最高的折扣sorting。 所以在SQL中,我会是这样的 ORDER BY (oldprice – price) 我遇到的另一个问题是通过string数组筛选string数组。 所以基本上我有一个“裤子”模型,与一个[大小]对象(string数组),其中包含多个尺寸。 现在我想能够search多个用户select的大小的分贝,并find所有的裤子,其中包含一个选定的大小。 我试过了: Pants.find({ name: new RegExp(search, 'ig'), sizes: { $in: [selectedSizes] } }).skip(skip).limit(limit).sort(sort).execFind(function(err, pants) { return res.send(pants); }); 如果一个值位于“selectedSizes”中,哪个工作正常,但失败并具有多个值。 希望有人有一些想法;-) 裤子型号: var PantsSchema; PantsSchema = new mongoose.Schema({ supplier: { type: String }, manufacturer: { type: String }, web: { type: String […]

在MongoDB中按date分组

我正在AppFog上运行一个博客式的Web应用程序(前Nodester)。 它是用NodeJS + Express编写的,使用Mongoose框架保存到MongoDB。 MongoDB是1.8版本,我不知道AppFog是否会升级到2.2。 为什么介绍这个? 那么,现在我的“post”显示在一个基本的“分页”的可视化,我的意思是他们只是从mongo拿起,按date降序sorting,一页一页。 这是一个片段: Post .find({pubblicato:true}) .populate("commenti") .sort("-dataInserimento") .skip(offset) .limit(archivePageSize) .exec(function(err,docs) { var result = {}; result.postsArray = (!err) ? docs : []; result.currentPage = currentPage; result.pages = howManyPages; cb(null, result); }); 现在,我的目标是GROUP BY'dataInserimento'和显示post就像一个“日记”,我的意思是: 第一页=> 2012/10/08:我显示3post 第二页=> 2012/10/10:我显示2post(2012/10/09没有post,所以我不允许一个白页) 第3页=> 2012/10/11:35post等等… 我的想法是首先获得所有date列表(也许每天计算post),然后build立页面链接,并且当页面(date)被访问时,像上面那样查询,添加date作为参数。 解决scheme : 汇总框架将是完美的,但我现在无法得到这个版本的Mongo 以某种方式使用.group(),但它在分片环境中不起作用的想法不会激起我的兴趣! 🙁 写MAP-REDUCE! 我认为这是正确的路要走,但我无法想象如何写map()和reduce()。 你能帮我一个小例子吗? 谢谢 编辑 […]

在运行时将缺省值添加到mongoose模型中

我想有我的mongoose模型中的某些字段的默认值。 诀窍是我不想将这些值存储在数据库中,但是在模型初始化时要添加什么值。 请帮忙。

无法使用find查询在mongoose中查找数据

在我的应用程序中,我希望用户input用户名和密码,然后用户名首先在数据库中使用查询查询进行检查,如果用户名发现则将新页面呈现给用户。 问题是如果我input一个错误的用户名和密码,那么它也呈现一个新的页面,并且页面也不完全加载。 请告诉我什么是错误的。 在app.js我写了: app.post('/profile',users.login); 在users.js我写: exports.login=function(req,res){ console.log("login called"); PersonalInfo.findOne({ name:req.params.userName}, function(err,data){ if(err) { console.log("find is not done"); console.log(data); } else{ res.render("/profilearea.ejs"); } }) }