Articles of mongodb

mongoose唯一:真正的预保存钩子在validation前调用钩子

据我了解,mongoose预保存挂钩在文档被插入集合之前,但在validation发生之后触发。 因此,如果一个validation失败,预保存的钩子将不会被调用。 在我的情况下,他们被称为无论: 下面这个简单的代码试图build立一个用户在注册时通过_id引用其他用户的模式。 添加预保存挂钩以自动将新用户的ID推入其引荐列表中。 所以用户注册时没有引荐 – >确定 用户b注册一个转介 – >确定 用户b2使用与b相同的电子邮件注册(不是确定的,唯一的),并且引用一个 – >应该失败,并且不应该在a.references中推送b2的ID 架构: var userSchema = new Schema({ email: {type:String, unique:true, required:true}, isVerified: {type:Boolean, default:false}, referredBy: {type:Schema.ObjectId, ref:'User'}, referred: [{type:Schema.ObjectId, ref:'User'}], }); userSchema.pre('save', function (next) { if (!this.isNew) return next(); if (!this.referredBy) return next(); User.findById(this.referredBy, function (err, doc) { if (err) return next(err); […]

Node.js MongoDb聚合总和与特定字段总和

这是我的collections[testing]。 {"_id" : "Test1", "enabled": "on", "value" : 10}, {"_id" : "Test2", "enabled": "on", "value" : 50}, {"_id" : "Test3", "enabled": "on", "value" : 10}, {"_id" : "Test4", "value" : 5}, {"_id" : "Test5", "value" : 2} 我想获得全部的价值和总价值的领域与"enabled":"on"像这样: 预期结果: [{_id:null,totalValue:77,totalEnabled:70}] 这是我迄今为止,但没有运气。 db.collection('test').aggregate({ $group: { _id: null, totalValue : { $sum: "$value" }, totalEnabled: $sum : […]

Mongo聚合与总和

我有个问题。 如何在mongo聚合模块中的特定行进行求和? 我的文档如下所示: { "_id" : "315" "city" : "Dallas", "population" : 3400, "state" : "Unknown" } 我怎样才能根据州和总数人口进行汇总? Y试过这个,但是有些错误: db.mydb.aggregate([{"$group":{"$state":"$state", "population":$sum}}])

用JSON对象更新MongoDB文档

我想更新一个MongoDB文档(使用Javascript数据库驱动程序)。 我想通过一个JSON对象,并有更新文件…像这样: Provider.prototype.updateProfile = function(username, profile, callback) { this.getCollection(function(error, profile_collection) { if( error ) callback( error ); else { profile_collection.update( {username: username}, {profile}, function(error, profile){ if( error ) callback(error); else callback(null, profile) }); } }); }; 我希望这是一个通用的function,所以如果文档结构的变化,我不必重新写。 目前我只能使用这个工作 {"$set": {x:profile.x, y:profile.y}} 在更新中,有没有人有一个通用的解决scheme,以便我可以通过任何configuration文件: profile = { …. }

就像用Monk库searchMongoDB一样

我试图做像search到Javascript与MongoDB,但我还没有想通了如何做到这一点。 任何帮助表示赞赏。 我在请求主体(req.body.search)上有一个名为“search”的search参数。 我想find所有程序名称包含该search条件。 IE浏览器。 “哈利”会回来“哈利波特”,“哈利波特”,“ 哈利真的是多么的快乐?” 和其他包含哈里名字的电影。 exports.programs = function(db, req) { return function(req, res) { var collection = db.get('programs'); collection.find({name: /req.body.search/ },{},function(e,docs){ res.json(docs); }); }; };

Node.js / Mongoose /按顺序sorting和显示

我有一个小问题,以原始顺序显示结果集。 我的mongoose“查询”就是: myCollection.find({}, null, {sort: {weight: 1}}, function (err, res) { //etc… }); 水库的日志是好的,我的结果是按重量顺序正确sorting。 我用一个forEach循环在ejs模板中显示结果如下: <% res.forEach(function(r) { %> <%= r.weight %> <% }) %> 它以“伪随机”顺序显示我的结果…例如:2,3,4,1,9,10,6 … 在我的模式中,权重参数是一个数字 weight : { type: Number, default: 0, required: false } 更新: 我对结果执行另一个查询,像这样的循环: newResult = []; async.each(res, function(r, callback) { // some actions with r … newResult.push(r); }, […]

如何处理与MongoDB和node.js的asynchronous?

在这个代码片段中更新MongoDB数据库之前 , 确保for循环完成其处理的最好方法是: var userIdArray = [] // contains 100000 userIds User.find({'_id': {$in: userIdArray}}, 'name', function(err, result){ var thisTime = new Date().getTime(); var usersArray = []; for (var i = 0; i < result.length; i++) { var user = result[i]; var userObject = { userId: user['_id'], userName: user.name, time: thisTime } usersArray.push(userObject); }; Model.update(id, {$pullAll: […]

MongoDB配对和删除顺序数据库条目的最佳方法

好吧,让我们说我正在做一场盲目的战争游戏! 用户A和B有x个士兵 目前有0个DB文档。 用户A发送50名制作DB文档的士兵用户B在用户A后发送62名士兵! 这将创build一个新的数据库文档。 我需要最有效/可扩展的方式来查找用户A的文档,将其与用户B的文档进行比较,然后删除这两个文档! (当然返回结果后) 这是问题! 我可能有一万多名用户在相同的时间发送士兵! 如何成功完成上述过程而不重叠? 我正在使用MEANstack进行开发,所以我不仅限于在数据库中这样做,但显然WebApp必须100%安全! 如果您需要任何其他信息或解释,请让我知道,我会更新这个问题 -谢谢

在Mongoskin分页(跳过+限制)

从看mongodb的例子来看,我尝试了一些东西,比如: // returns an empty array funnyPosts.find({limit:5}).toArray(function(err, result) { console.log(result); }); 也试过 // returns { _construct_args: [], console.log(db.collection('funny_posts').find().skip(3).limit(3));

Node.js,Express和Mongoose,未定义的数据

只是一个noob问题: 我试图使用属性“封面”来删除与该集合相关的文件,但问题是,它显示为“未定义”。 有没有人有这样的问题? 谢谢 !!! 这是我的日志: 完整结果 – {__v:0,_id:5329a730e4b6306a08297318, 公司:'asd', 封面 :'44f4a87035bd22c1995dcf0ab8af05b0', 描述:'asd', kind:'asd', 名称:'asd'} RESULT COVER – 未定义 这是我的代码: exports.delete = function(req,res){ if(!req.session.authorized){ res.json(403,{message:'YOU MUST BE LOGGED IN'}); return; } Product.find({_id:req.params.id}, function(err,result){ if (err){ res.json(401, {message: err}); }else{ console.log("FULL RESULT – " + result); console.log("RESULT COVER – " + result.cover); var prodCoverName = result.cover; […]