Articles of mongodb

mongodb nodejs本地驱动程序是否closures连接

在nodejs中,每个请求打开mongodb连接并在callback中closures它是一个好习惯吗? app.get('/some_route', function(){ MongoClient.connect(url,function(err, db){ //some db query with callback db.collection("some_collection").findOne(doc, function(err,item){ if(err){ res.send(err); //close db connection db.close(); }else{ //do something with item res.send(item); //close db connection db.close(); } }); }); 有人说,每个请求打开/closuresMongoDB连接是不必要的,因为一旦打开,连接池可以共享。 问题是如何维护和共享该池? mongoose已经这样做了吗? 特别是在mongodb超时或断开连接时,是否需要重新连接? 我发现这里矛盾的答案是closures每个请求的MongoDB连接 几乎所有在线文档nodejs mongodb本地驱动程序和示例代码我读,一个db.open()与db.close()在callback中的某处配对。 因为如果一个连接池被共享,你可能会编码 根据christkv的回答,有人可能会编码: var p_db=null; var c_opt = {server:{auto_reconnect:true}}; app.get('/some_route', function(){ //pseudo code if (!p_db){ MongoClient.connect(url, c_opt, function(err,db){ […]

MongoDB与Redis的用户会话?

我需要加载一些很less更改的信息字段,用于validation用户可能访问的路由。 目前,我查询mongodb,并将这些字段与redis中的任何特定状态信息一起存储在用户login时由'user:' + mongodb_user_objectid键入的单个散列中。 然后,我为http cookie创build一个会话,并将此密钥存储为redis中的string,并由'sess:' + session_id作为键。 如果其中一个validation字段可能发生变化,是不是应该从mongodb中复制字段并处理redis和mongodb的更新? 在没有使用redis作为中间人的情况下,直接从/向mongodb读取和写入会话信息是否会有显着的性能差异?

Mongoose .pre('save')不会触发

我有以下模型mongoose.model('quotes') : var mongoose = require('mongoose'); var Schema = mongoose.Schema; var quotesSchema = new Schema({ created: { type: String, default: moment().format() }, type: { type: Number, default: 0 }, number: { type: Number, required: true }, title: { type: String, required: true, trim: true}, background: { type: String, required: true }, points: { type: Number, […]

类构造函数不能被调用没有“新”

刚刚升级到4.1.2节点,并使用Mongorito(使用ES6)访问Mongo,我得到这个: 模型文件: var Mongorito = require('mongorito'); var Model = Mongorito.Model; var config = require('../config/config'); Mongorito.connect(config.mongo.url); class Listing extends Model {} module.exports = Listing; 我正在包括它: var Listing = require('../models/listing'); var listing = yield Listing.where('cacheKey', key).findOne(); TypeError: Class constructors cannot be invoked without 'new' at Listing.Model (/node_modules/mongorito/lib/mongorito.js:140:15) at new Listing (/models/listing.js:7:14) at Query.find (/node_modules/mongorito/lib/query.js:355:21) at [object Generator].next […]

Mongo Atlas:连接身份validation失败,自定义数据库

我正在尝试Mongo Atlas Cloud。 我创build一个集群,我正在尝试与mongo shell的连接:(与mongo驱动程序相同的问题) mongo mongodb://***-cluster-shard-00-00-***.mongodb.net:27017,***-cluster-shard-00-01-***.mongodb.net:27017,***-cluster-shard-00-02-***.mongodb.net:27017/any_database?replicaSet=****-Cluster-shard-0 –ssl –username ***** –password ***** 这是文档中的连接string。 这是错误的: MongoDB shell version: 3.2.7 connecting to: mongodb://***-cluster-shard-00-00-***.mongodb.net:27017,***-cluster-shard-00-01-***.mongodb.net:27017,***-cluster-shard-00-02-***.mongodb.net:27017/any_database?replicaSet=***-Cluster-shard-0 2016-07-07T01:31:17.535-0300 I NETWORK [thread1] Starting new replica set monitor for ***-Cluster-shard-0/***-cluster-shard-00-00-***.mongodb.net:27017,***-cluster-shard-00-01-***.mongodb.net:27017,***-cluster-shard-00-02-***.mongodb.net:27017 2016-07-07T01:31:17.535-0300 I NETWORK [ReplicaSetMonitorWatcher] starting 2016-07-07T01:31:20.084-0300 E QUERY [thread1] Error: Authentication failed. : DB.prototype._authOrThrow@src/mongo/shell/db.js:1441:20 @(auth):6:1 @(auth):1:2 exception: login failed 只有当我使用pipe理数据库“/ admin?”时才可以连接到数据库 在连接string中。 问题: […]

Node.js监听MongoDB的变化

有没有一种方法让Node.js监听MongoDB集合中特定数据的变化,并在发生变化时触发事件?

MongoDB是社区网站的正确DB吗?

我正在用Node.JS和Express创build一个社区站点,几乎所有的快速教程或示例都使用MongoDB,所以我查了一下。 到目前为止我使用的唯一的数据库是MySQL,但是我对它并不是很熟悉,所以不会读入MongoDB。 Mongo看起来相当不错,文档模型可能是有益的。 和mongoose一起使用很简单。 但是我有一些问题,所以如果不适合的话,我不花很多时间学习使用MongoDB: 我读过MongoDB是不可靠的,如果你只在一台机器上使用它,你可能会遇到数据丢失。 是对的吗? 该项目不是那么大,我可以承受另一台服务器和数据丢失是完全不行! 想象一下一些论坛post就消失了。 但是我想人们不会在这种情况下使用它。 该网站将包含一个自我构build的论坛,我不知道如果关系数据库会更好。 但是,您可以保存embedded式post的线程等。 但不知道如何searchMongo不支持全文search。 你怎么看? 什么时候在Mongo中使用embedded式文档? 示例:用户可以像在Twitter上一样发布状态更新。 你会将这些更新保存在用户文档中吗? 可以有很多更新。 或每更新一个文件,并将其链接到用户ID? 3.1如何查询多个文档? 你想获取你的朋友的最后10个状态更新。 你可以用MySQL中的JOIN来完成。 有没有办法使用MySQL中的文档的自动增量ID? 例如一个用户应该有一个唯一的整数密钥,但我不希望一些像Mongo这样的随机数字,为了保持用户ID很小。 你如何处理mongoose的竞争条件? 你从数据库中加载一个文档,编辑一些东西并稍后保存。 但也许它已经在同一时间改变了。

MongoDB和Node.js中的dynamic查询

我正在使用后端Mongodb的nodejs / express应用程序。 在我的一个API调用中,取决于是否存在特定查询string参数,或者其他我想用$ gt或$ lt来向Mongodb发出查询。 在某些情况下,我们希望使用$ lt来请求所有小于tokenId ,但在其他情况下,我们希望使用$ gt的值大于tokenId 。 我们如何做到这一点,而不重复查询? 这是一个示例查询: collection.find({'film_id': {$in : genre}, '_id': {$lt: tokenId}}).sort({'_id': -1}).limit(25).toArray(function(error, films) 有没有办法dynamic创build查询,而不是实际做两个不同的查询?

关系数据库devise到mongoDB / mongoosedevise

我最近开始使用mongoDB和mongoose为我的新的node.js应用程序。 在我努力适应mongoDB / noSQL思维方式(如非规范化和缺乏外键关系)之前,只使用了关系数据库。 我有这个关系数据库devise: **Users Table** user_id username email password **Games Table** game_id game_name **Lobbies Table** lobby_id game_id lobby_name **Scores Table** user_id game_id score 所以,每个大厅都属于一个游戏,多个大厅可以属于同一个游戏。 用户对不同的游戏也有不同的分数。 到目前为止,我的用户架构,我有以下几点: var UserSchema = new mongoose.Schema({ username: { type: String, index: true, required: true, unique: true }, email: { type: String, required: true }, password: { type: String, […]

有没有办法提供一个mongoose.js聚合allowDiskUse选项?

我正在运行一个大约300k +logging的集合,这需要几个展开和重新组合。 我遇到以下错误; 'exception: Exceeded memory limit for $group, but didn\'t allow external sort. Pass allowDiskUse:true to opt in.' 我似乎无法解决如何通过使用mongoose.js API来传递此选项?