Articles of mongoose

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, […]

链承诺在JavaScript

我创build了许多这样的承诺,以便在我的数据库中创build对象。 var createUserPromise = new Promise( function(resolve, reject) { User.create({ email: 'toto@toto.com' }, function() { console.log("User populated"); // callback called when user is created resolve(); }); } ); 最后,我想按我想要的顺序打电话给我所有的承诺。 (因为有些对象依赖于其他对象,所以我需要保持这个顺序) createUserPromise .then(createCommentPromise .then(createGamePromise .then(createRoomPromise))); 所以我期望看到: User populated Comment populated Game populated Room populated 不幸的是,这个消息被打乱,我不明白是什么。 谢谢

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中。 问题: […]

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的竞争条件? 你从数据库中加载一个文档,编辑一些东西并稍后保存。 但也许它已经在同一时间改变了。

Mongoose TypeError模型的findOne方法

下面的TypeError在一些旧的代码中出现。 TypeError: Object #<Object> has no method 'findOne' 最近受到影响的模型定义了两个新的静态方法,这些方法引用了外部模型。 在退出新的静态方法之后,我能够确定根本原因是外部模型的require语句。 模式如下所示: var UserModel = require('./user'); var GroupSchema = new Schema({ name: String, users: [{ type : Schema.ObjectId, ref: 'UserModel'}], }); GroupSchema.statics.findSomeUsers = function(group, callback) { this.find({name : session_user._id}, function(err, groups) { UserModel.find({_id : {$in : group.users}}, function(err,patients) { // do magic }); }); }; module.exports […]

关系数据库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来传递此选项?

在nodeJs中避免callback地狱/将variables传递给内部函数

这里有一个我想要简化的例子: exports.generateUrl = function (req, res) { var id = req.query.someParameter; var query = MyMongooseModel.findOne({'id': id}); query.exec(function (err, mongooseModel) { if(err) { //deal with it } if (!mongooseModel) { generateUrl(Id, function (err, text, url) { if (err) { res.status(HttpStatus.INTERNAL_SERVER_ERROR).send(err); return; } var newMongooseModel = new AnotherMongooseModel(); newMongooseModel.id = id; newMongooseModel.save(function (err) { if (err) { […]

Mongoose查询执行后,callback函数永远不会调用

以下是我的代码: mongoose.connect('mongodb://localhost/mydatabase'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback () { console.log('DB connection opened'); }); // … var dbCallback = function(err, body) { // … }; // … var StuffModel = mongoose.model('Stuff', StuffSchema); StuffModel.find({}).exec(dbCallback); dbCallback函数永远不会被调用。 任何帮助将不胜感激!

如何在MongoDB中为NodeJS Express应用程序存储站点configuration?

我有一个使用MongoDB和Jade模板语言在NodeJS 0.8.8上运行的Expressjs应用程序,我希望允许用户configuration许多站点范围的显示选项,例如页面标题,徽标图像等。 我如何将这些configuration选项存储在mongoDB数据库中,以便我可以在应用程序启动时读取它们,在应用程序运行时操作它们,并将它们显示在jade模板中? 这是我的一般应用程序设置: var app = module.exports = express(); global.app = app; var DB = require('./accessDB'); var conn = 'mongodb://localhost/dbname'; var db; // App Config app.configure(function(){ … }); db = new DB.startup(conn); //env specific config app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); // etc // use date manipulation tool moment app.locals.moment = […]