Articles of mongodb

在NodeJS中dynamic构buildMongoDB查询

我收到一个POST参数,如下所示: sort: [ { field: 'name', dir: 'asc', compare: '' }, { field: 'org', dir: 'asc', compare: '' } ] } 我需要创build一个基于MongoDB的查询,所以它应该是这样的: db.collection("my_collection").find( … ).sort({'name': 'asc', 'org': 'asc'}).toArray(…); 不pipe怎样,请记住,可以传递更多的字段。 此外,可能会发生这些字段都没有传递,这意味着查询不会有.sort() 。 我的问题:我如何dynamic创build一个查询与节点的MongoDB驱动程序? 有没有查询生成器或类似的东西?

NodeJS本地驱动程序上的示例MongoDB错误是什么样的?

我似乎无法find他们的文档或在互联网上的任何MongoDB错误对象的例子。 什么是一个示例MongoDB错误对象的样子? 我想“处理”错误和/或重新格式化它为我自己的目的,这取决于错误是什么。

为什么在使用MongoDB的$ push将新对象添加到数组时,为什么添加了ObjectID的_id?

我正在使用Node.js和Mongoose。 玩家和锦标赛variables是Mongoose对象,就在之前获取。 我想添加一个新的tournamentSession对象(不是一个Mongoose对象)到玩家对象的tournamentSessions字段。 我正在使用findOneAndUpdate能够确保我不添加两个相同的tournement(使用“$ ne”) Player.findOneAndUpdate({ '_id': player._id, 'tournamentSessions.tournament': { '$ne': tournament._id } }, { '$push': { 'tournamentSessions': { 'tournament': tournament._id, 'level': 1, 'status': 'LIMBO', 'score': 0, } } }, function(err, updatedPlayer) { // … }); 一切正常,除了包含ObjectID的“_id”字段被添加到tournamentSessions数组中新添加的会话,我不明白为什么会发生这种情况。 如果我手动添加“_id”字段和值“BLABLABLA”,“_id”字段永远不会被存储(因为它应该,因为它没有在模式中声明) 嗯,这是模式: var Player = mongoose.model('Player', Schema({ createdAt: { type: Date, default: Date.now }, lastActiveAt: Date, clientVersion: String, […]

Node.js承诺与mongoskin

我试图避免在进行mongodb查询时使用callback。 我使用mongoskin来打电话,如下所示: req.db.collection('users').find().toArray(function (err, doc) { res.json(doc); }); 在许多情况下,我需要做多个查询,所以我想使用Node.js承诺库,但我不知道如何将这些函数作为承诺包装。 我看到的大多数例子对于像readFile这样的事情来说都是微不足道的,我猜在这种情况下,我需要以某种方式包装到Array中。 这可以做,或将不得不由蒙古人实施的东西? 一个例子可以是任何一组callback,find / insert,find / find / insert,find / update: req.db.collection('users').find().toArray(function (err, doc) { if (doc) { req.db.collection('users').find().toArray(function (err, doc) { // etc… }); } else { // err } });

如何在存储后从MongoDB中检索二进制文件?

我存储的文件类似于以下内容: var pdfBinary = fs.readFileSync("myfile.pdf"); var invoice = {}; invoice.pdf = new mongo.Binary(pdfBinary); 然后我把上面的文件插入到MongoDB中。 然后我尝试检索它类似于以下内容: collection.findOne({}, function(err, retrievedPDF) { fs.writeFile("myretrieved.pdf", retrievedPDF.pdf.buffer, function(err) { …. }); }); 它作为一个零字节文件出来。 如果我console.log存储的文件,它看起来像这样: { pdf: { _bsontype: 'Binary', sub_type: 0, position: 0, buffer: <Buffer > }, _id: 53af545681a59758611937d7 } 我已经通过了文档,我发现它有点混乱。 我做错了,我无法存储/检索文件?

mongoose – 从每个用户find最后一条消息

我正在处理消息系统,我需要从发送消息给login用户的每个用户获取最后一条消息。 我在mongoDB中有这样的结构: [{ "_id": "551bd621bb5895e4109bc3ce", "from": "admin", "to": "user1", "message": "message1", "created": "2015-04-01T11:27:29.671Z" }, { "_id": "551bd9acf26208ac1d9b831d", "from": "user1", "to": "admin", "message": "message2", "created": "2015-04-01T11:42:36.936Z" }, { "_id": "551bdd6d849d53001dd8a64a", "from": "user1", "to": "user2", "message": "message3", "created": "2015-04-01T11:58:37.858Z" }, { "_id": "551bdd99849d53001dd8a64b", "from": "user2", "to": "admin", "__v": 0, "message": "message4", "created": "2015-04-01T11:59:21.005Z" }, { "_id": "551bdda1849d53001dd8a64c", […]

mongoose默认值等于其他值

对于我的项目,我创build了一个userSchema,其简化如下所示: var userSchema = new Schema({ _id: String, screenname: {type: String, required: false, default: "equal _id"}, }); 用户有一个_id,这也是他的用户名。 一切工作到目前为止,直到我试图添加一个额外的字段screenname。 我想要的是当用户创build一个帐户时,他的屏幕名称等于_id的值。 稍后他可以调整它,但默认情况下,它应该等于_id的值。 我也试过了: screenname: {type: String, required: false, default: _id}, 但比课堂_id没有定义。 我应该如何设置默认值等于另一个值?

nodejs等待,直到所有的MongoDB调用循环完成

我正在逐行读取一个CSV文件的数据stream,并在每一行调用一个findOne MongoDB调用,在运行下一个函数之前,我怎么才能等到每行的所有mongo调用都完成? 我见过Promises能做到吗? 但是我发现Promises非常难以理解。 而且我发现的例子都没有包括我想要的。 :/ var validProducts = []; fs.createReadStream(req.file.path) .pipe(csvStream) .on('error', function (err) { console.error(err); }) // loop through all rows .on('data', function (data) { if (data.size === 'a3') { ProductModel.findOne({ sku: data.sku }, function (err, product) { if (product !== null) { product.size = data.size; product.save(); validProducts.push(product); } }); } }); // […]

MongoDB,Mongoose和Node.js 为什么要申报一个模型?

我是面向文档的数据库的新手。 我的问题是为什么我必须在每次启动应用程序时在MongoDB中声明一个模型? 例如: mongoose.model('User', { collection: 'user', properties: [ 'created', 'username', 'password', 'email' ]} //Edited: '}' was missing in original post ); 我想build立所有表一次,并在我的应用程序只饲料或查询数据。 我认为所有的数据架构应该通过CLI或一个特殊的pipe理员(比如PhpMyAdmin for mySql)来设置。 事实certificate,在我的应用程序开始时,每次我声明一个数据模型。 对我来说没有意义。 帮帮我 :)

NodeJS + Express + Mongo Session存储

我目前正在尝试在MongoDb中存储会话。 我尝试了express-session-mongo和connect-mongodb,当我尝试加载login页面时,它们都给了我相同的“500内部服务器错误”。 这让我想,也许在某处与mongoose有冲突。 无论如何,这是我的设置: app.js: var MongoStore = require('connect-mongodb'); var MongoDb = require('mongodb').Db; var Server = require('mongodb').Server; var db = new MongoDb('myDb', new Server('localhost', 27017, {auto_reconnect: true, native_parser: false})); app.configure(function() { app.use(express.logger({format: 'dev'})); app.set('views', __dirname + '/../views'); app.set('view engine', 'jade'); app.set('view options', { layout: false }); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(mongooseAuth.middleware()); app.use(require('./mysite').middleware()); app.use(express.methodOverride()); }); app.configure('production', function(){ var […]