Articles of mongodb

在mongoosepre中间件,我如何访问更新查询?

我正在尝试使用mongoose> 4.0.0的新不稳定版本来validation更新查询。 说我想要使用以下查询更新架构 schema.update({_id:'blah'},{a:'blah'},function(err){ //do your thing }) 所以可以说我有以下模式, var schema = new Schema({ a:{type:String} }); schema.pre('update',function(next){ var findQuery=this._conditions; // gives {_id:'blah'} // how do i get {a:'blah'}???? next(); }); 我如何得到{pre:中间件中的{set:{a:'blah'}}的更新查询,以便在执行更新之前执行一些检查? 或者我知道更新查询可以在post中间件中访问, schema.post('update',function(){ var findQuery=this._conditions; // gives {_id:'blah'} var updateQuery=this._update; //gives {$set:{a:'blah'}} next(); }); 但是这太晚了,我需要在pre中间件中检查实际更新数据库之前。 我试图通过前中间件的这个“对象”,但无法find任何地方的updateQuery对象,而这个._update在前置中间件中是未定义的。 有没有办法做到这一点? 谢谢

嘲笑用于MEAN应用程序unit testing的MongoDB连接

我一直在绞尽脑汁,试图找出一种方法来处理我的unit testingMongoDB连接。 我想知道什么适当的方法是做这个,因为我的应用程序布局可能是问题。 这是一个更大的项目,有很多模块。 总体布局 package.json server.js -models -index.js -users.js -events.js -… -services -index.js -userActivity.js -… +public +routes +util +test 车型/ users.js "use strict"; modules.export = function(mongoose) { var Schema = mongoose.Schema; var userSchema = new Schema({ name: String }); var userModel = mongoose.model('User', userSchema); var userDAO {}; userDAO.addUser(user) { var newUser = new userModel(user); […]

meteor:超出最大调用堆栈大小

我尝试做一些我已经做了几次,从来没有遇到过这样的错误。 我只是想在我的meteor应用程序中find他们的X字段等于Y的所有文件: JS:(模板的帮手) 'friendPictures' : function(){ var currentFriendId = this._id; Pictures.find({ownerId: currentFriendId}); // DO SOMETHING WITH THE PICTURES } HTML :(模板内) {{#each friend}} … {{friendPictures}} // Calling for the helper … {{/each}} 在尝试执行“find()”时,我仍然遇到这个错误,同样在Chrome的控制台中: Uncaught RangeError: Maximum call stack size exceeded at Object.EJSON.clone (http://localhost:3000/packages/ejson.js?71047b64b5196348bdbe5fd5eea9ac97a5a9eb14:528:3) at http://localhost:3000/packages/ejson.js?71047b64b5196348bdbe5fd5eea9ac97a5a9eb14:530:22 at Function._.each._.forEach (http://localhost:3000/packages/underscore.js?0a80a8623e1b40b5df5a05582f288ddd586eaa18:164:22) at Object.EJSON.clone (http://localhost:3000/packages/ejson.js?71047b64b5196348bdbe5fd5eea9ac97a5a9eb14:529:5) at http://localhost:3000/packages/ejson.js?71047b64b5196348bdbe5fd5eea9ac97a5a9eb14:530:22 at Function._.each._.forEach […]

MongoDB Node JS转义单引号问题

在我的Node js中,我已经用下面的函数逃脱了单引号 var regescape = function(text) { return text.replace(/[\[\]']+/g, "\\$&"); }; 这对我来说工作得很好。 但突然间,我发现我的数据库中有一个string“M $”。 哪个不是以我的下面的查询返回。 param 1 = "M'$"; var cursor = db.collection('search').find({"searchcontent.name":new RegExp('^'+regescape(param1))}).limit(10); 另请build议处理NodeJSparameter passing给MongoDB的最佳做法。 我从PHP代码调用NodeJS。 我正在从PHP代码发送参数与rawurlencode() 。 在节点js中,我使用decodeURI()来接收参数。 编辑: 我的PHP代码调用节点JS: function getdetail($data1) { $p1 = $data1; $service_url = 'http://exampleserver:8081/search?param1='.$p1; $curl = curl_init($service_url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $curl_response = curl_exec($curl); if ($curl_response === false) { […]

KeystoneJS中间件使用Model.find()调用MongoDB时运行两次

我有一个路线,加载一个公寓列表,并显示它们: app.get( '/condo-list', middleware.loadCondoList, routes.views.condolist ); loadCondoList中间件调用CondoBuilding模型并在res.locals上设置结果: exports.loadCondoList = function loadCondoList( req, res, next ) { console.log( 'request url: ' + req.url ); console.log( 'getting condo buildings…' ); CondoBuilding.model .find() .exec( ( err, condos ) => { if ( err ) { // pass error along next( err ); } else { // add CondoBuildings […]

我更好地分裂一个精心制作的mongoose模型?

假设/login API的情况下,对于一组匹配的凭证,应该返回来自集合的用户对象,哪种方法会更有效: 1)一个带投影查询的模型: var UserSchema = new Schema({ name : String, email : String, dob : Number, phone : Number, gender : String, location : Object, // GeoJSON format {type: 'Point', geometry: { lat: '23.00', lng: '102.23' }} followers : [UserSchema], following : [UserSchema], posts : [PostSchema], groups : [GroupSchema] // … and so on […]

Mongoose模式/查询最佳实践(MongoDB,node.js)

我试图在node.js应用程序中用Mongoose分解我的RDBMS思想,并且可以使用一些指导来了解最佳实践。 一个简单的例子:假设有两个集合,组织和联系人。 这是一对多的关系,他们都需要孤独。 然而,在索引方法中,我想返回一个组织对象数组,每个组织对象都有一个成员联系对象数组。 (后来我想返回一组联系人,每个联系人都有一个组织对象。) 在我看来,我误解了完成这个的最好方法。 以下是我迄今看到的选项: 将联系人与他们的IDembedded组织文档中。 索引查询可以是Organization.find({}, function(err, orgs) { orgs[n].contacts[n]…}) 。 缺点 :需要大量额外的存储空间,并且每次更改“主”联系人文档时都必须更新embedded式联系人文档。 利用Mongoose的populate / DBRef结构在两个表中存储“外键”标识符。 查询可以是: Organization.find({}}.populate('contacts').run(…) 。 缺点 :你必须在两边存储密钥。 去比较传统的“外键”路线,在联系人文件中只存储组织ID。 查询组织文档,然后查询组织查询的callback中的所有联系人,将数据组合成一个对象返回。 缺点 :多个查询和额外的处理开销(我相信我们必须独立地为这些组织find组织和联系人,然后迭代每个组织,在公共_id字段上手动匹配,将它们组合成一个新的输出对象)。 我必须错过一个更好的select。 允许#3的模式的东西,但返回所需的组合的对象,更less的开销。 注意 : asynchronous模块似乎可以帮助这个,但是这真的是唯一的/最好的方式吗?

mongo本地ensureIndex不创build索引

我正在使用mongodb本地驱动程序的节点。 检索集合后,我调用ensureIndex({ keywords: 1}) 。 当我检查mongo控制台时,当我调用db.mycol.getIndexes()时,什么也不显示。 我究竟做错了什么?

引用错误不会从MongoDBcallback中抛出

介绍 所有的人都知道,如果我们调用undefined.test我们会收到以下错误(对于NodeJS和Javascript都是一样的): $ node > undefined.test TypeError: Cannot read property 'test' of undefined at repl:1:11 at REPLServer.self.eval (repl.js:110:21) at Interface.<anonymous> (repl.js:239:12) at Interface.EventEmitter.emit (events.js:95:17) at Interface._onLine (readline.js:202:10) at Interface._line (readline.js:531:8) at Interface._ttyWrite (readline.js:760:14) at ReadStream.onkeypress (readline.js:99:10) at ReadStream.EventEmitter.emit (events.js:98:17) at emitKey (readline.js:1095:12) 这是正确的! 我怎么find这个问题? 过了一个星期,我花了大约30分钟的时间来debugging下面的问题:一个脚本意外停止,没有错误发生。 我有这个应该是一个对象的urlsvariables: var urls = settings.urls || {}; 然后在接下来的urls行我需要得到一个string的urls shop密钥: var […]

mongoose:“_doc”怎么了?

看起来mongoose在内部正在做一些非常有趣的事情。 1 var Foo = new mongoose.model('Foo', new mongoose.Schema({a: String, b: Number})); 2 var foo = new Foo({a: 'test; b: 42}); 3 var obj = {c: 1}; 4 foo.goo = obj; // simple object assignment. obj should be // passed by reference to foo.goo. recall goo // is not defined in the Foo model schema […]