Tag: mongojs

Node.js和MongoDB无法规范化查询

我有一个在服务器上工作了6个月的NodeJS脚本,本周我已经安装了一个新的服务器,并安装了所有更新版本的软件,包括mongojs,nodejs和mongodb,不知何故,我的代码不再工作。 代码的一部分: collect.findOne({$or: [{from_id: enviou, to_id: viu}, {from_id: viu, to_id: enviou}]}, {sort: {$natural: -1}}, function (err, echoData) { if (err || !echoData) { console.log("No messages found -rv",err); } else { console.log(echoData); } }); 给我错误: { [MongoError: Can't canonicalize query: BadValue Projection cannot have a mix of inclusion and exclusion.] name: 'MongoError', message: 'Can\'t canonicalize query: […]

通过JavaScript从mongodb中读取辅助副本集

我有两个mongo实例在两个不同的服务器(一个主要和其他次要)运行; 我能够使用此连接代码从主服务器检索文档: var db = mongojs('user:pswd@localhost:27017/mydb?authSource=admin'); 但是,当我尝试从辅助服务器检索文档时,出现以下错误: {[MongoError:not master and slaveOk = false] 名称:'MongoError', 消息:'not master and slaveOk = false', OK:0, errmsg:'not master and slaveOk = false', 代码:13435} 我也尝试使用代码: var db = mongojs('user:pswd@localhost:27017/mydb?authSource=admin&slaveOk=true'); 我错过了什么?

MongoJS在使用正则expression式search时不返回数据

Node.js, mongojs ,mongodb。 我正在使用正则expression式search技能列表。 这是我的服务器代码: var nconf = require('nconf'); var db = require('mongojs').connect(nconf.get('mongolab:connection'), ['skills', 'users']); app.get('/api/skill', function(req, res){ console.log('searching for ' + req.query['q']); var query = '{name: /' + req.query['q'] + '/i}'; console.log('query: ' + query); db.skills.find(query, function(err, data){ console.log('returning ' + JSON.stringify(data)); if(!err){ res.writeHead(200, {'content-type': 'text/json' }); res.write( JSON.stringify(data) ); res.end('\n'); } }); }); […]

MongoJS限制和跳过

我需要使用限制,并跳过从mongo获得一些logging。 我用NodeJS使用MongoJS,但下面给出的是不工作。 下面是一个例子: db.users.find(function(err,doc{ console.log(doc); })).skip(2).limit(2); 我也试过类似的东西: db.users.find({ skip:0, limit: 5 }, function(err, results) { console.log(results); }); 我是新来的JS / NodeJS / MongoJS,请让我知道如何正确使用上面的代码。

MongoDB查询在mongo-shell上执行的时间为1ms,但在NodeJS上的执行时间为400ms以上

我有一个大的MongoDB集合,包含超过2GB的原始数据,我使用一个非常简单的查询来从集合中获取特定的文档。 文档大小的范围从10KB到4MB,Id字段被定义为索引。 这是我正在使用的查询(与mongojs模块): db.collection('categories').find({ id: category_id }, function(err, docs) { callback(err, docs.length ? docs[0] : false); }).limit(1); 当我使用MongoDB shell或Robomongo等GUI来执行这个查询时,无论物理大小如何,大约需要1ms的时间,但是当我在NodeJS上执行完全相同的查询时,响应时间从2ms到2s以上取决于数据量。 我只测量接收响应所需的时间,即使在.explain()等待超过500毫秒的情况下,MongoDB分析器( .explain() )显示仅执行一个毫秒即可执行查询。 现在,我可能做错了什么,但我不知道它是什么。 我对NodeJS比较陌生,但过去我曾经使用过MongoDB和PHP,而且从来没有遇到这样的性能问题,所以我倾向于认为我可能以某种方式滥用NodeJS。 我也试过在WebStorm上使用SpyJS进行分析,我看到有很多bson.deserialize调用快速地汇总成一个大堆栈,但是我无法进一步调查,因为SpyJS总是在这个时候崩溃。 可能有关,但我仍然不知道如何处理它。 请指教,任何线索将不胜感激。 编辑:这是db.categories.getIndexes()的结果: [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "my_db.categories" }, { "v" : 1, "key" : { "id" […]

collection.find mongojs同步callback

我正在尝试为mongojs collection.find方法编写自己的包装器,该方法应该返回指定查询select的集合项目(查询尚未实现,只需select所有结果)。 问题是,我没有得到一组结果。 似乎find方法做了某种asynchronouscallback。 那么如何强制同步调用或强制脚本等待呢? Collection.prototype.find = function () { var result = new Array; if (Bridge.isServer) { db.collection(name).find(function(err, items) { items.forEach(function(item) { result.push(item); }); }); } return result; }

用mongojs在heroku上连接到mongoHQ

我正尝试从我的node.js应用程序连接到mongoHQ。 这是我正在使用的代码: var databaseUrl = "mongodb://fishcuss:MyPassword@alex.mongohq.com:10015/app9759558" var collections = ["users"] var db = require("mongojs").connect(databaseUrl, collections); exports.register = function(req, res){ console.log("Register hit") var user = req.body; db.users.findOne({username:user.username}, function(err, users) { console.log(err) console.log(users); if( err || users) { res.statusCode = 500; res.end(); } else { console.log("Inserting new user") user._id = uuid.v4(); user.lists = []; db.users.insert(user,{},function(){ req.session.user=user res.write(JSON.stringify(user), […]

如果多更新在MongoDB中部分失败,如何回滚?

我知道一个多更新不会是primefaces的,有可能在这个过程中更新查询可能会失败。 错误可以通过getLastErrorfind。 但是如果我想要回滚已经在特定查询中完成的更新呢? 任何比单调乏味的两阶段提交更简单的方法? 例如,让我说我有一些简单的收集一些用户和他们的手机型号。 现在我对所有拥有Nexus 4到Nexus 5的用户进行多重更新(Dreamy,不是吗?)。 唯一的条件是,全部或没有 – 所有的N5被收回,即使一个N4的用户没有得到他的。 现在,不知何故,mongodb之间的失败,我坚持与less数用户与N4和less数与N5。 现在,我从网上收集到的是我不能让mongo直接回滚。 如果操作失败,我将不得不手动将N5用户更新回N4。 如果这太失败了,不断重复。 或者当我有一个复杂的collections,我将不得不保留一个新的关键即是。 Status和更新关键字更新 / 更新 。 这是我的理解。 我想知道是否有更简单的方法。 我从评论中认为答案是一个很大的不。

mongojs实现新的bie

嗨,我是新来的MongoDB和NodeJs。 我正在使用“mongojs”模块来简单地从mongodb读取数据。 代码如下: var dbname = 'XXXX'; var databaseUrl = 'mongodb://localhost:27017/'+dbname; var collections = ['candidate','cities','states','countries']; var mongojs = require('mongojs'); var db = mongojs(databaseUrl, collections); db.candidate.findOne({fname:'XXX'},function(err,doc){ if(err){ console.log(err); } else{ console.log(doc); } }); db.close(); 当我在terminal上运行它们时,我得到这个错误: { name: 'MongoError', message: 'server localhost:27017 sockets closed' } 看起来像db.close()在获取数据之前正在执行。 我们如何处理这类问题。

Mongo“未经授权查询”在用户定义的表上,同时被authentication为dbOwner

我使用的是mongojs 2.3.0连接到运行3.0的MongoDB集群。 我用来连接的用户凭证是为具有dbOwner权限的用户(因此他们应该具有所有集合的读/写权限)。 该驱动程序成功地进行了大量的查询,但有一个令人惊讶的数量的查询失败,在我的问题的标题(“未经授权的查询”)的错误。 我还可以使用mongo shell会话中的凭证对集合进行身份validation和查询。 有没有其他人曾经遇到过这个问题? 谢谢!