这是我用来连接到我的数据库的代码: private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> { return Mongoose.connect(databaseUri).then(() => { debug('Connected to MongoDB at %O', databaseUri); return Mongoose.connection; }); } 今天我更新了Mongoose到版本4.11.0,并且在运行我的testing时遇到了这个警告: (node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()` 我找不到任何有关如何设置useMongoClient的信息。 你们知道如何?
我正在试图决定如何处理Mongoose中的validation错误。 使用节点validation器自定义错误消息 我已经使用节点validation器定义了我自己的validation规则,例如: UserSchema.path('username') .validate(function (username) { return validator.check(username).notEmpty() }, 'Username cannot be blank') 这将产生一个如下所示的错误: username: { message: 'Validator "Username cannot be blank" failed for path username', name: 'ValidatorError', path: 'username', type: 'Username cannot be blank' }, 使用mongoosevalidation器 但是,节点validation器提供自己的错误消息。 如果我使用mongoose-validator Node模块将节点validation器直接插入到我的模式中,那么我可以直接使用这些错误消息: var UserSchema = new Schema({ name: { type: String, validate: [validate('notEmpty')] } }); 这将生成一个如下所示的错误消息: […]
当我使用mongoose工作时,我发现了两种在nodejs中创build新文档的方法。 第一 : var instance = new MyModel(); instance.key = 'hello'; instance.save(function (err) { // }); 第二 MyModel.create({key: 'hello'}, function (err) { // }); 有什么区别吗?
我试图用Node.js中的Mongoose连接到一个使用用户名和密码的MongoDB数据库。 所有的文档都说连接string应该看起来像 mongodb://username:password@host:port/db 但是,密码中包含“@”字符。 我怎样才能使连接string出这个mongoose会明白? 我可以逃避密码中的“@”,还是有另一种连接方法,我必须使用?
我刚刚开始用mongoose。 我有一个创build脚本与mongoose创build模式和数据库与示例数据。 现在我写实际的应用程序。 我是否需要在每次运行应用程序时创build模式对象,还是以某种方式已经可用? 换句话说,我是否需要在每个使用mongoose访问数据库的应用程序中运行此代码,或者只是第一次运行该代码: var Comments = new Schema({ title : String , body : String , date : Date }); 如果我有setter / validations / etc,答案会如何变化?
据我所知,从3.8.9版本开始,mongoose支持全文search。 但我找不到一个好的文档! 我想做一些事情: db.collection.ensureIndex( // Fields to index { animal: "text", color: "text", pattern: "text", size: "text" }, // Options { name: "best_match_index", // Adjust field weights (default is 1) weights: { animal: 5, // Most relevant search field size: 4 // Also relevant } } ) 我可以用纯mongoose做到吗? 或者我必须使用一些像mongoose-text-search的插件? 如果没有重量? 我该怎么做?
Campaign.find {client_id:req.param('client_id')}, (error, campaigns) -> if error response = error: error.message else for campaign in campaigns query = campaign_id: campaign._id console.log query CampaignResponse.find query, (err, campaignResponsesCount) -> console.log campaignResponsesCount response = campaigns res.json response 出于某种原因,这不会返回任何结果。 但是, CampaignResponse中的项目与特定的campaign._id 。 我很确定这是一个types和铸造的问题,但我不知道该怎么做。 任何帮助?
这是一个简化版本的问题,但基本上我试图与mongoose打开2个mongodb连接,它给了我“尝试打开未closures的连接”。 错误。 代码示例: var db1 = require('mongoose'); db1.connect('my.db.ip.address', 'my-db'); var db2 = require('mongoose'); db2.connect('my.db.ip.address', 'my-db'); db2.connection.close(); db1.connection.close(); 任何想法如何使其工作?
我对Node.js和Mongo / Mongoose比较陌生,在解决特定的Mongoose错误时遇到了一些困难: VersionError:未find匹配的文档。 (整个错误跟踪/堆栈在这个问题的底部。) 这个博客文章非常清楚地概述了一个VersionError可能发生的情况: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html (TL; DR – “Mongoose v3现在为每个文档添加了一个模式可configuration的版本密钥,只要对数组的修改可能改变任何数组元素的位置,该值就会自动递增。”如果试图保存文档,键不再匹配你检索到的对象,你会得到上面的VersionError 。) 核心问题:有没有办法显示有问题的save()操作? 或者哪个文件没有保存? 还是什么呢 ?! ;) 挑战:这是一个相对较大的有许多arrays的代码库,我不确定如何开始解决这个问题。 特别是,错误跟踪/堆栈似乎并不显示问题存在的地方。 见下文: VersionError: No matching document found. at handleSave (<project_path>/node_modules/mongoose/lib/model.js:121:23) at exports.tick (<project_path>/node_modules/mongoose/lib/utils.js:408:16) at null.<anonymous> (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js:484:9) at g (events.js:192:14) at EventEmitter.emit (events.js:126:20) at Server.Base._callHandler (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:391:25) at Server.connect.connectionPool.on.server._serverState (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:558:20) at MongoReply.parseBody (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:131:5) at Server.connect.connectionPool.on.server._serverState (<project_path>/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:517:22) at EventEmitter.emit […]
现在我将会话数据存储在与“连接”(express)绑定在一起的“内存存储”中。 但我想/必须改变这个生产。 应用程序正在使用mongodb,我安装mongoose来处理所有的数据库通信。 例如初始化我的应用程序后连接到数据库: var mongo = require('mongoose'); mongo.connect('mongodb://localhost/myDb'); mongo.connection.on('open', function () { app.listen(3000); } 我find了连接mongodb模块,但我不知道如何使用mongoose来实现它,或者如果它实际上是可能的? 我需要添加这样的东西: var mongoStore = require('connect-mongodb'); // … app.use(express.session({ secret: 'topsecret', maxAge: new Date(Date.now() + 3600000), store: new mongoStore({ db: 'myDb' }) })); 或者我必须直接使用mongodb模块第二次定义我的数据库连接?