Articles of mongodb

$ set在mongodb更新中不起作用

所以即时通讯工作与nodeJS和mongoDB 。 即时通讯在更新一个集合时遇到问题,自从我开始工作一个星期以来,这真的让我很头疼。 所以这是我的样本集合 { "_id": ObjectId('51299sdfasdf') //this is just a sample Id "names": [ "NameA", "NameB", "NameC" ], "names_id": [ ObjectId('asdfasdf1312'), ObjectId('12sda123123a'), ObjectId('asdf1212123a') ], "user_alias": "SampleA" } 那么这是我的脚本 var mongoose = require('mongoose'); var model = mongoose.model('Sample'); model.update( { _id: req.query._id }, { $set: { names: namesArray, //this are set of names ex; ['name1', 'name2'] […]

直接在前端自动更新mongodb的更改,而不使用Node Socket.io和angularjs进行页面刷新

我的问题是,如果我直接在mongodb中手动添加一条消息,如何在活动的UI客户端页面中自动显示而不需要刷新。 我的代码如下。 我的情况是,当新客户端访问页面时,显示mongo中的现有logging,从而保持连接。 但是,如果我直接在mongo里添加一条logging并加载一个新的客户端,那么只有这个logging会有logging,而其他的logging只会在刷新时才会得到。 app.js(服务器端脚本) mongoose.connect("mongodb://localhost:27017/some"); var mschema=mongoose.Schema({ message: String, time : {type:Date ,default: Date.now} }); io.sockets.on('connection', function (socket) { chatmsg.find({},function(err,docs) { if(err) console.log("errorr"); else socket.emit('old msgs',docs); }) socket.on('message', function(message) { var newmsg=new chatmsg({message : message}); newmsg.save(function(err) { if(err) { console.log("error"); } else io.sockets.emit('new message',message) ; }) }) controller.js(客户端脚本) var socket=io("http://localhost:3200"); $scope.sendemit=function() { console.log("inside function"+$scope.textchat); […]

将sorting添加到mongoose查找查询

首先,我做了一些备忘录的列表页。 我想通过订单创build的备忘录加载备忘录。 这意味着就像简单的SNS一样,我想让它们按堆栈顺序加载。 这是数据库架构添加“created_at” var StatSchema = mongoose.Schema({ id: {type: Number, unique: true, 'default':''}, … created_at: {type: Date, index: {unique: false}, 'default': Date.now} }); 我有方法简单地列出所有的备忘录。 其实这是关于MongoDB的路线。 StatSchema.static('findAll', function(callback) { return this.find({}, callback); }); 然后,我想添加属性“sorting”就像 this.sort({'created_at':-1}) 我如何修改原始代码?

处理MongoError的好方法:服务器实例池被销毁

我用mongo连接池运行一个守护进程。 它运行良好的天,但最终崩溃,每一个后续请求得到这个错误: MongoError:服务器实例池被销毁 代码与此类似: var MongoClient = require('mongodb').MongoClient; var express = require('express'); var app = express(); MongoClient.connect(config.mongo.url, function(err, db) { app.use('/', function(req, res, next) { db.collection('somecollection').find({}).toArray(function(err, result) { console.log(result); }); }) var server = require('http').Server(app); server.listen(config.worker.port, function() { var address = server.address(); logger.info({ address: address.address, port: address.port }, 'New Worker created'); }); }); 重新启动过程可以解决问题,但是我希望应用程序以某种方式优雅地重新连接并重置那里的“db”对象。

Mongoose-paginate:溢出sorting阶段缓冲的数据使用情况?

我正在使用mongoose,mongoose和ExpressJS。 我有这个错误: 错误检索stream:MongoError:运行器错误:溢出sorting阶段缓冲数据使用34227161字节超过内部限制的33554432字节 routes.js: router.get("/", function(req, res, next) { var page = req.query.page === undefined ? 1 : req.query.page; var options = { page: page, limit: 30, sort: { created_at: 'desc' } }; // https://github.com/edwardhotchkiss/mongoose-paginate Stream.paginate(query, options, function(err, result) { if (err) { console.log("Error retrieving streams: " + err); errorMessage = "A problem occurred retrieving […]

从Mongoose查询结果中排除空属性

我使用Mongoose查询数据,然后通过我的快速API作为响应返回。 我想阻止在API响应中出现空属性。 有没有一种很好的方式通过mongoose做到这一点? 推荐使用Express&Mongoose的方法是什么?

PassportJS重命名“用户”对象

我使用PassportJS作为我的loginfunction有没有办法改变请求中的“用户”对象名称? 这是现在它是如何工作的,默认情况下(req.user): function (req, res, next) { if (!req.user) { req.flash('error', 'Please sign in to access this page.'); res.redirect('/login'); } else { next(); } } 我想使用下面的代替(req.candidate): function (req, res, next) { if (!req.candidate) { req.flash('error', 'Please sign in to access this page.'); res.redirect('/login'); } else { next(); } }

如何强制for循环等待callback完成在nodejs?

entry.find(function(err,user){ for(var i=0;i<user.length;i++){ if(user[i].tablenumber==-1){ assigntable(user[i]); } } }); 所以我在这里要做的是在调用asynchronousassigntable函数之前等待每个for循环完成。 Assigntable是对数据库进行更改的callback。 我现在的问题是,因为asscomntable的callback是在for循环完成后调用的,所有的用户都会被分配到表1中。但是我想要的是:将第一个分配给表1 – >在下一个循环中分配表1被分配 – >用户2被分配到表2等等。 我怎么做? 编辑:Assgintable是一个recursion调用,在callback中编辑数据库。 更新将基于从前一个循环产生的数据库的结果,但我没有在这里相关。 function assigntable(user,tableindex){ console.log("in recursion with tableindex"+tableindex); if(tableindex==3) return; console.log(user.date+user.time+tableindex); entry.find({ $and: [ { "tablenumber": tableindex}, { "date": user.date }, {"time":user.time} ] },function(err, result) { if(result.length==0){ console.log(result+"result is "); entry.update({"_id":user._id},{"tablenumber":tableindex},function(err, numberAffected) { if(!numberAffected){ } else { console.log("entryupdated with […]

Node.js,mongodb和过滤的查询

我正在使用mongodb的本地API,并试图查询我的集合上的数据。 这是我的过滤对象: { email: 'admin@email.it', login: { '$exists': true } } 这是它应该find的一个文件: { "_id": "5829cd89a48a7813f0cc7429", "timestamp": "2016-11-14T14:43:18.705Z", "login": { "clientIPaddr": "::1", "clientProxy": "none" }, "userData": { "sessdata": { "sessionID": "CRTZaqpaUs-ep0J6rvYMBlQTdDakGwle", "email": "admin@email.it", "token": "3PlfQBVBoftlIpl-FizeCW5TbYMgcYTl4ZPTkHMVyxqv-TldWb_6U3eusJ27gtI64v7EqjT-KPlUUwkJK7hPnQ" } } } 但查询不会返回任何东西! 为什么?

根据mongo db中第一个表的结果从第二个表中加载数据

我正在尝试加载并显示来自mongo db的一些信息。 我的网站在node.js / express上运行。 我有两个表,第一个是调色板,我加载和显示所有的,而且工作得很好。 但对于每个调色板,我有一个例子列表。 我想遍历每个调色板,并获取该调色板的所有示例。 我肯定是做错了,我想这是因为find()方法是asynchronous的,所以我的数据发送之前,它拉额外的数据。 但是我不能把render函数放在callback中,因为它是多次运行的。 在PHP中,我曾经能够从另一个表中获取数据,并将其连接到第一个基于公共列的数据,但是我不确定如何在此处执行此操作,这就是为什么我尝试使用循环。 /* GET palette database main page. */ router.get('/', function(req, res, next) { console.log('rendering test page'); var Palette = require('../models/paletteDatabase'); //load all palettes Palette.find({}, function(err, palettes) { if (err) return next(err); var PaletteExamples = require('../models/paletteExamples'); for (var i = 0; i < palettes.length; i++) { […]