Articles of mongodb

在Express路由器中使用mongoDB

我只是在学习如何使用node / express和mongodb,而且我对关于连接池的工作有些困惑。 我现在的策略是在路由器级别连接数据库,所以每条路由都有自己的连接。 我的代码我的一个路线如下所示: var express = require('express'); var router = express.Router(); var config = require('../config.json'); var url = config.db.URI; var MongoClient = require('mongodb').MongoClient , assert = require('assert'); var db; // Connect to database router.all('*', function(req, res, next) { console.log('Connecting to db'); MongoClient.connect(url, function(err, database) { assert.equal(null, err); db = database; }); next(); }); […]

MongoDB和Nodejs自动增加插入ID

我是NodeJs和MongoDB的新手,我想用自动增量主键'id'插入行。 还在mongo服务器上定义了一个名为getNextSequence的函数。 这在Mongodb服务器上是完美的 > db.user.insert({ "id" : getNextSequence('user_id'), "username" : "test", "email" : "test@test.com", "password" : "test123" }) 现在我想插入NodeJs.I已经尝试过,但不工作 db.collection('user').insertOne({ id : "getNextSequence('user_id')", username : query.name, email: query.email, password: query.pass }, function(err, result) { assert.equal(err, null); console.log("row insterted "); callback(); });

将`_id`自动转换为`ObjectID`

有没有办法告诉NodeJS的本地MongoDB驱动程序自动将_id字段的内容转换为ObjectID? 说,在这种情况下: db.collection("collection").updateOne({_id: data._id}, data) 这不是data._id = ObjectID(data.id)很难,但每次都错过了另一回事。

mongoose聚合不支持writeConcern

我正在尝试计算给定用户未读的通知数量。 这就是说,vía aggregate ,我已经做了下一个代码在控制台输出预期的结果: db.getCollection('users').aggregate([ { $match: { _id: ObjectId("5847f61a825d024ac9e3d08c")}}, { $unwind: '$notifications'}, { $match: {'notifications.read': {$eq: 0}}}, { $group: { _id: '$_id', notifications: {$push: '$notifications._id'}}}]) 其输出: { "_id" : ObjectId("5847f61a825d024ac9e3d08c"), "notifications" : [ ObjectId("5847fefb708b3b4c2cf9e8fe"), ObjectId("5847fefe708b3b4c2cf9e900") ] } 所以我试图做同样的nodeJS和mongoose ,所以我有一个模型和一个static方法是完全一样的,我在我的最后一个查询: var UserSchema = new mongoose.Schema({ nickname: { type: String, trim: true}, username: { type: String, […]

如何使用Mongoose Aggregation FrameWork对数组元素进行分组

我有以下Mongoose模式: EmployeeSchema: var EmployeeSchema = new Schema({ name : String, employeeDetailsId: { type: Schema.Types.ObjectId, ref: 'employeedetails' } }); EmployeeDetailSchema: var EmployeeDetailSchema = new Schema({ employeeId: { type: Schema.Types.ObjectId, ref: 'employee' }, statusId: { type: Schema.Types.ObjectId, ref: 'status' }, primarySkills: [ { type: Schema.Types.ObjectId, ref: 'skills' }] }); SkillsSchema: var SkillsSchema = new Schema({ name: { […]

用“$ arrayElemAt”投影返回的元素

如果我在这里混淆了一些术语,请原谅我,但是我正在使用'$ lookup'操作符在聚合中执行连接操作,如下所示: db.collection('items').aggregate([{$match: {}}, { $lookup: { from: 'usr', localField: 'usr._id', foreignField: '_id', as: '__usr' } }, { $project: { info: 1, timestamp: 1, usr: { "$arrayElemAt": [ "$__usr", 0 ] } } }], (err, result) => { res.json(result); db.close(); }); 我在聚合结果上执行投影,我使用'$ arrayElemAt'从结果数组中提取单个'usr'匹配。 出于显而易见的原因,我不想返回包含敏感信息的整个“usr”logging。 我正在做的是对使用'$ arrayElemAt'操作返回的元素执行投影。 我能够做到这一点的唯一方法是使用原始投影的额外投影,如下所示: db.collection('items').aggregate([{$match: {}}, { $lookup: { from: 'usr', localField: […]

函数返回不工作

我在节点工作,并尝试从我的数据库加载下一个序列。 我能够访问数据库,加载并返回我的函数内的序列,但我无法访问它的function之外。 function getRunId() { counters.findOne({_id: 'Run_ID'}, function(err, resp) { if(err) { console.log(err); } console.log('Seq: ' + resp.sequence); // Console Output = Seq: 1234 return resp.sequence; }); }; var currentRunId = getRunId(); console.log('Run_ID: ' + currentRunId); // Console Output = CRID: undefined 我已经检查了几个关于使用callback,asynchronous(节点模块),如何正确地返回函数中的值堆栈溢出问题的页面,但没有让我更接近访问currentRunIdfunction之外。 在我的函数内使用Mongo查询,这个问题进一步复杂化了吗?

mongoose更新位置/指数数组中的项目

有没有办法更新例如与mongoose数组中的第二个项目? 架构: title: String, answer: [{ content: String, votes: Number }] 在我的情况下,我想更新第一个或第二个答案,所以它有更多的1票。

Node.js + Mongoose中的基本build模

我坚持开发一个node.js应用程序。 我试图build立一个音阶,它有一个名字和一些相关的音符: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var scaleSchema = new Schema({ name: String, displayName: String, notes: [{type: String}] }); module.exports = mongoose.model('Scale', scaleSchema); 但是,我不知道如何“种子”,甚至不能访问这个模型。 我想用一些只能装入一次的秤来填充它。 我知道我可以要求这个模型,并使用new来创build新的条目,但是有没有我必须把它放在节点应用程序的特定部分? 是否有一个最佳的使用方法? 我做错了吗? 我在这里相当困惑,但感觉好像我几乎掌握了它的工作方式。 有人能指出我正确的方向吗?

Nodejs:TypeError:Object#<Object>没有方法'endianness'

我尝试在Ubuntu 14.04 LTS上运行server:node app.js,然后得到这个错误: /home/ubuntu/Ytutor_Server/node_modules/mongodb-core/lib/topologies/shared.js:18 var nodejsversion = f('Node.js %s, %s', process.version, os.endianness()); ^ TypeError: Object #<Object> has no method 'endianness' at Object.<anonymous> (/home/ubuntu/Ytutor_Server/node_modules/mongodb-core/lib/topologies/shared.js:18:61) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:362:17) at require (module.js:378:17) at Object.<anonymous> (/home/ubuntu/Ytutor_Server/node_modules/mongodb-core/lib/connection/pool.js:11:12) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) 我不知道这有什么问题。 我使用Nodejs v6.9和Mongodb v3.2.11,它应该有内容'endianness'模块操作系统?