Articles of aggregation framework

有没有办法提供一个mongoose.js聚合allowDiskUse选项?

我正在运行一个大约300k +logging的集合,这需要几个展开和重新组合。 我遇到以下错误; 'exception: Exceeded memory limit for $group, but didn\'t allow external sort. Pass allowDiskUse:true to opt in.' 我似乎无法解决如何通过使用mongoose.js API来传递此选项?

在MongoDB中汇总当地时区

我正在build设将在意大利使用的mongodb和nodejs应用程序。 意大利时区为+02:00。 这意味着如果有人在7月11日凌晨1点保存一些数据,那么它将被保存为7月10日晚上11点,因为mongo以UTC保存date。 我们需要显示明智的tx计数。 所以我通过查询date进行了分组。 但它显示前一天的TX。 什么应该是这个解决方法。 > db.txs.insert({txid:"1",date : new Date("2015-07-11T01:00:00+02:00")}) > db.txs.insert({txid:"2",date : new Date("2015-07-11T05:00:00+02:00")}) > db.txs.insert({txid:"3",date : new Date("2015-07-10T21:00:00+02:00")}) > db.txs.find().pretty() { "_id" : ObjectId("55a0a55499c6740f3dfe14e4"), "txid" : "1", "date" : ISODate("2015-07-10T23:00:00Z") } { "_id" : ObjectId("55a0a55599c6740f3dfe14e5"), "txid" : "2", "date" : ISODate("2015-07-11T03:00:00Z") } { "_id" : ObjectId("55a0a55699c6740f3dfe14e6"), "txid" : "3", "date" : […]

在Mongoose中对嵌套的子文档进行sorting和分组

我有一个架构, Comment ,如下所示。 这是一个“评论”和“回复”的系统,但每个评论和回复都有多个版本。 当用户想要查看评论时,我想只返回status为APPROVED最新版本。 const Version = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, body: String, created: Date, title: String, status: { type: String, enum: [ 'APPROVED', 'OPEN', 'CLOSED' ] } }) const Reply = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, created: Date, versions: [ Version ] }) const […]

从数组中获得所有匹配属性的结果

我知道如何使MongoDB根据如下数组find一行: useritems.find({userid: useridhere, "items.id": idhere}) 但是,我将如何search,并获得所有被激活的项目,或获得所有项目的物业属性? 例如: useritems.find({userid: useridhere, "items.activated": true}) 会导致从激活的用户获取所有项目是真实的。 这是我的项目架构: var userItemsSchema = new Schema({ userid : String, items: [ { id: {type: Number, default: 1}, activated: { type: Boolean, default: false}, endtime : {type: Number, default: 0}, }, ], }); module.exports = mongoose.model('useritems', userItemsSchema);

如何在MongoDB中进行收集?

我们在Node.JS中有以下查询 mongo.connect('mongodb://XXX:XXX@ds054XXX.mlab.com:54289/XXXdb', function (err, db) { var collection = db.collection('chatmessages') var stream = collection.find().sort({ _id: -1 }).limit(20).stream(); stream.on('data', function (chat) { socket.emit('user message', chat.content, chat.dateCreated); }); }); 如您所见,查询是最近input的20条logging的集合。 但是从这个结果来看,我们想在_id中再次求助于1,所以在列表中我们将有55到75的ID(顺序)。 所以最后一个总是在底部。 我们如何再次实现这一目标?

MongoDB计数不同的值?

下面显示我的代码。 我必须计算重复值的次数。 在这里,我有存储在“结果”独特的价值。我用collection.count()来计算,但它不工作。 请任何人告诉我,我不得不错误。 非常感谢你 。 var DistinctIntoSingleDB = function(Collection,arr,opt,distVal,callback){ Collection.find({}).distinct(distVal, function(err, results) { if(!err && results){ console.log("Distinct Row Length :", results.length); var a,arr1 = []; for(var j=0; j<results.length; j++){ collection.count({'V6': results[j]}, function(err, count) { console.log(count) }); arr1.push(results[j]+ " : " +a); } callback(results,arr1); }else{ console.log(err, results); callback(results); } });

MongoDB聚合算术操作 – 子文档字段

我们有一个聚合查询投影几个子文件。 我们想要对这些投影值应用Sum和Product等算术运算。 聚合查询 – Item.aggregate([ { $unwind: '$dummy'}, { $match: {'dummy.storage': {$gt: 0}} }, { $group: {_id: '$_id', dummy: {$push: '$dummy'}, original_y: { $first: "$original_y" }, new_y: { $first: "$new_y" }, }}, {$project:{ original_y: 1, new_y: 1, tallyAmount: {$sum: ["$new_y","$original_y"] } } }, ] ) .exec(function(err, results){ if(err) { console.log("Error : " + err); return […]

mongoose – 如何分组和填充?

我使用MongoDB和Mongoose作为我的ODM,我试图使用populate和group by在同一语句中进行查询。 这里是我的简单文件模型: var userSchema = new Schema({ username: String }); var messageSchema = new Schema({ from: { type: Schema.ObjectId, ref: 'User' }, to: { type: Schema.ObjectId, ref: 'User' }, message: String, date: { type: Date, default: Date.now } }); 我只是试图把每个用户的消息,每个与他交谈的用户分组。 我试过这样的: this.find({ 'to': user }) .sort({ 'date': 1 }) .group('from') .populate(['from', 'to']) .exec(callback); 但不幸的是,我的模型没有group方法。 […]

在两个不同的字段mongodb + node.js中search值

我是新手。 但我试图学习编写查询的最合理的方法。 假设我有collections这是; { "id" : NumberInt(1), "school" : [ { "name" : "george", "code" : "01" }, { "name" : "michelangelo", "code" : "01" } ], "enrolledStudents" : [ { "userName" : "elisabeth", "code" : NumberInt(21) } ] } { "id" : NumberInt(2), "school" : [ { "name" : "leonarda da vinci", "code" : […]

如何使用mongoose发现所有包含一部分string的值?

我有以下问题使用mongoose从MongoDB中检索数据。 这是我的模式: const BookSchema = new Schema( { _id:Number, title:String, authors:[String], subjects:[String] } ); 你可以看到我有2个数组embedded对象,让我们说,作者的内容可以是这样的:作者:[“亚历克斯·弗格森”,“德罗巴”,“克里斯蒂亚诺罗纳尔多”,“亚历克斯”] 我想要实现的是获得arrays中的所有Alex。 到目前为止,我已经能够得到值,如果他们完全匹配的价值。 但是,如果我试图得到那些包含亚历克斯的答案总是[]。 我想知道的是,如何使用find()而不执行map-reduce来创build视图或集合,然后在其上应用find()。 这里的代码适用于完全匹配 Book.find( {authors:req.query.q} , function(errs, books){ if(errs){ res.send(errs); } res.json(books); }); 我尝试了一些东西,但没有运气{作者:{$ elemMatch:req.query.q}} {作者:{$ in:[req.query.q]}} 这个给了我一个错误,而且在我发现这里的另一个post里说的是非常低效的。 {$ where:this.authors.indexOf(req.query.q)!= -1} 我也试过{作者:{$ regex:“./ value / i”}} map-reduce工作正常,我需要使用其他方法来查看哪个更好? 任何帮助是极大的赞赏。 我确信这很容易,但是我是NodeJS和Mongo的新手,我一直无法自己搞清楚。