Articles of mongodb

使用$ group阶段和$ sum运算符进行聚合

我想使用聚合和小组阶段来总和所有“总计”字段值。 我的代码和文件在这里 文件 { "_id": "57a068477b2l51ec16eb7das", "userID":"5742c6eedsaadsd93573e", "profileID":"5742aee49adv520593573c", "date": 1470130247779, "updateDate": 1470130361342, "total": 2 } { "_id": "57a068477b2l51ec16eb983", "userID":"5742c6eedsaadsd93573e", "profileID":"5742aee49adv520593573c", "date": 1470130247779, "updateDate": 1470130361342, "total": 1 } 我正在做下面的查询获取“总”值的总和 RecallProfile.aggregate([ { "$match": { "updateDate": { "$gte": from, "$lte": to } } }, { $group: { "_id": "$updateDate", "totalRecord": {"$sum": "$total"} } } ], function (err, result) […]

“无法validation”与promised-mongo

我使用Promised-Mongo从NodeJS后端代码连接MongoDB和Promises。 它工作正常,直到我启用MongoDB的客户端访问控制。 当我运行这个代码时,我得到“无法validation”消息“: var pmongo = require('promised-mongo').compatible(); var db = pmongo('myusername:mypassword@localhost/mydb', ['candidates']); db.candidates.save(req.body) .then(function () { // never reached here }) .catch(function (e) { // it reached here, where e.message says "could not authenticate" }); 纯粹的MongoDB代码(即没有承诺…)工作正常: var mongodb = require('mongodb'); var uri = 'mongodb://myusername:mypassword@localhost/mydb'; mongodb.MongoClient.connect(uri, function (err, db) { if (err) { // never reached […]

meteor/ NodeJS与MongoDB副本集 – 多数据中心副本

我正在运行Meteor(NodeJS),并计划指向运行在不同数据中心的MongoDB的多个副本。 我打算使用: MONGO_URL = “mongodb的:// server1的:27017,服务器2:27017,服务器3:27017,服务器4:27017 / DBNAME replicaSet = RS1&readPreference =最近&W =多数” 两个问题。 1)有谁知道这是否会告诉节点/meteor从最接近MongoDB的数据库读取请求(最快的ping时间)? 根据MongoDB文档,我认为它应该是“最接近的”readPreference https://docs.mongodb.com/manual/core/read-preference/,但我无法在Meteor和Node文档中find答案。 2)如果最接近的MongoDB消失或超时,是否会自动将数据库读取请求故障转移到下一个最接近的Mongo?

Node.js套接字IO:如何持续保存套接字数据到MongoDB

我正在使用THREE.js在浏览器中构build3D游戏。 很多的乐趣,但我遇到了以下情况: 在我的3D场景中的一个对象不断地移动,由用户input驱动。 我需要实时将对象的位置保存到我的数据库。 我们从前端开始。 Angular.js使用内置的$watch函数来观察我的对象的位置。 对象的位置可以每秒更改多次 。 在每次更改时,我使用Socket IO向后端Node.js服务器发送事件,如下所示: socket.emit('update', { id: id, position: position }); 在后端 ,事件被捕获并立即发送到同一个Socket IO Room中的其他成员。 这样,这个房间里的每个人都可以获得最实时的更新。 现在,因为事件每秒可能发生多次 ,所以我不想在每次更改时更新我的MongoDB集合,因为这会导致很多开销。 相反,我正在寻找一种偶然将数据保存到数据库的方式。 我想出了一个解决scheme,使用Node.js的setInterval函数,每1000ms保存数据。 对于在后端接收的每个不同的id (每个对象都是唯一的),将在JavaScript对象上创build一个新的键,从而跟踪每个对象的变化。 后端的(简化)代码: let update_queue = new Object(); // … // Update Event socket.on('update', (msg) => { // Flag Changes if (!update_queue[msg.id]) update_queue[msg.id] = { changes: true }; // […]

在Mongoose中,insertMany与collection.insert有什么不同?

我search了一下,find了使用Mongoose向MongoDB插入大量文档的正确解决scheme。 我目前的解决scheme如下所示: MongoClient.saveData = function(RecordModel, data, priority, SCHID, callback){ var dataParsed = parseDataToFitSchema(data, priority, SCHID); console.log("Model created. Inserting in batches."); RecordModel.insertMany(dataParsed) .then(function(mongooseDocuments) { console.log("Insertion was successful."); }) .catch(function(err) { callback("Error while inserting data to DB: "+err); return; }) .done(function() { callback(null); return; }); } 但在我看来,还有其他提供的解决scheme。 像这样: http : //www.unknownerror.org/opensource/Automattic/mongoose/q/stackoverflow/16726330/mongoose-mongodb-batch-insert 使用collection.insert 。 这与Model.insertMany什么不同? 我的上一个问题同样适用于更新: 使用Mongoose更新MongoDB中的许多logging的正确方法是什么? 问我如何使用由_id定义的Mongoose更新大块数据。 […]

使用节点js在mongodb中过滤

大家好,我试图find特定的数据使用filter,但我不知道我们如何设置或使用filter和它的属性。我已经存储了1分为真,0为假。 当我下一次打电话问题时,​​我想要过滤分数问题。 所以第0号问题将被显示在浏览器上,而不是一个 1)。这是我存储问题ID,每个问题的得分和时间的模式 child:{ quiz: questionId:{type:String}, score:{type:Number}, time:{type:String} } } 2)。 这是问题模式 _id:{type:String}, question:{type:String}, answer:{type:String} 3)。 这是我的节点js代码用来获取和设置filter其实我没有得到我们如何设置filter的想法,以便下次我只调用API 0 score id问题将出现在我的浏览器,而不是1 var childinfo = require('../models/child.js'); var childquestion = require('../models/question.js'); this.filter = function(req, res, next){ async.waterfall({ function(callback){ try{ var query = {child.quiz.score:1}; var projection = ''; childinfo.find(query,function(err,data){ if(err) return next(err); callback(null, data) }); } catch(err){ console.log(err); […]

节点jsasynchronousmongodb find()查询多个调用

我使用提取logging find()。指定者() 查询。 在那个logging中,有其他文件(表)的关系id。 我想获得上面查找查询结果的每条logging的关系表的logging。 喜欢: db.collection('serviceBooking').find({'request_to_sp_user_id': docs._id.toString()}).toArray(function (err, serviceBookingDocs) { if (serviceBookingDocs.length) { var asyncCalls = []; serviceBookingDocs.forEach(function (bookingRecord, key) { var temp = {}; temp.userDetails = {}; //Async call for getting the user details for all users asyncCalls.push(function (callback) { db.collection('userDetails').findOne({'user_id': new mongo.ObjectID(bookingRecord.booked_by_user_id)}, function (err, userDetailsDocs) { db.collection('serviceBookingDetails').find({'serviceBookingId': bookingRecord._id.toString()}).toArray(function (err, bookingDetailsDocs) { if […]

所有字段search

这是我的数据集,这是一个更大的json代码的一部分。 我想写一个查询,它将匹配价值链内的所有领域。 数据集: "value_chain" : { "category" : "Source, Make & Deliver", "hpe_level0" : "gift Chain Planning", "hpe_level1" : "nodemand to Plan", "hpe_level2" : "nodemand Planning", "hpe_level3" : "nodemand Sensing" }, 例: 如果有人search“礼物”,查询应扫描所有字段,如果匹配,则返回文档。 这是我尝试的,但没有工作 db.sw_api.find({ value_chain: { $elemMatch: { "Source, Make & Deliver" } } })

遗漏mongoose模式属性仍在返回

给定一个如下所示的模式: var schema = new mongoose.Schema({ name: 'string', size: 'string' }); 数据库包含集合中所有对象的“名称”。 但是,我改变它,并删除名称 var schema = new mongoose.Schema({ size: 'string' }); 然后我做了一个发现: schema.find({}).exec().then( (objs) => { // objs[0].name still exists 我认为,如果架构没有指定一个属性,那么它不会存在于find的对象。 不是这样吗? 是删除一个属性的唯一方法,实际上是从mongo中的对象中删除它?

如何正确使用函数populate()

我使用函数.populate()来获取按category分组的equipements ,所以我的模型是这样的 var mongoose = require('../config/db'); var EquipementSchema = mongoose.Schema({ libelle: String, marque: String, category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' } }); module.exports = mongoose.model('Equipement', EquipementSchema); 路线: router.get('/categorie_id', function(req, res, next){ models.equipement.aggregate([ { $group : { _id : '$categorie_id', equipements: { $push: '$$ROOT' } } } ].exec(function(err , results){ if(err) res.json({error: err}); res.json(results); })); }); […]