Articles of mongoose

mongoose:扩展模式

目前我有两个几乎相同的模式: var userSchema = mongoose.Schema({ email: {type: String, unique: true, required: true, validate: emailValidator}, passwordHash: {type: String, required: true}, firstname: {type: String, validate: firstnameValidator}, lastname: {type: String, validate: lastnameValidator}, phone: {type: String, validate: phoneValidator}, }); 和 var adminSchema = mongoose.Schema({ email: {type: String, unique: true, required: true, validate: emailValidator}, passwordHash: {type: String, required: true}, firstname: […]

MongoError:对_id的Mod不允许

在这里有几个问题,但我似乎无法find一个似乎是目前被接受的方法的解决scheme。 我试图更新MongoDB中的文档,我正在使用Mongoosejs来做到这一点。 但是,我收到这个错误: { [MongoError: Mod on _id not allowed] name: 'MongoError', lastErrorObject: { err: 'Mod on _id not allowed', code: 10148, n: 0, connectionId: 35, ok: 1 }, ok: 0, errmsg: 'Mod on _id not allowed' } 我用来进行更新的代码是: app.put('/task/:short', auth, function (req, res) { Task.findOneAndUpdate({short:req.params.short}, req.body, function(err, task) { if(err) console.log(err); res.json(200, {content: task}); […]

Node + Mongoose:获取最后插入的ID?

我想检索最后插入的_id ,使用mongoose作为node.js的MongoDB包装器。 我find了下面的教程,但是我不能更改任何节点模块,因为应用程序在公共服务器上运行: 获取“最后插入的ID”(提示 – 你必须破解mongoose) 任何其他的想法? 这是我想要做的: 插入新用户 获取用户的_id值 根据用户的ID设置一个新的会话 redirect到/ 谢谢!

Model.find()在mongoose中返回空白

我正在处理mongoose在mongodb中列出一个数据库中的所有数据: 从请求: http://localhost:3000/listdoc?model=Organization 我正在做下面的代码: exports.listDoc = function(req, res) { var Model = mongoose.model(req.query.model); //This is defined and returns my desired model name Model.find().populate('name').exec(function(err, models) { if (err) { res.render('error', { status: 500 }); } else { res.jsonp(models); } }); }; 我已经有我在数据库中的条目但上面的代码返回空。 为什么? 编辑:下面的代码也返回空: exports.listDoc = function(req, res) { var Model = mongoose.model(req.query.model); Model.find({},function(err,models){ console.log(models); if […]

mongoose子文件在单独的文件上,如何embedded它们

我正在定义我的应用程序模型,并为每个我定义的模型有单独的文件,我的问题是,我需要创build一个使用子文档的模型,但是在另一个文件上,我如何使用该模式在我的模型上? 我的意思是我见过的所有例子在同一个文件中声明了Child模型和Parent,例如: var childSchema = new Schema({ name: 'string' }); var parentSchema = new Schema({ children: [childSchema] }); 我有一个名为user.js文件,它定义了用户模型: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ _id : Schema.Types.ObjectId, username : String, }); module.exports = mongoose.model( 'User', userSchema ); 在另一个叫做sport.js文件中,我有另外一个体育运动的模型定义: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var […]

mongoose填充嵌套数组

假设以下3个模型: var CarSchema = new Schema({ name: {type: String}, partIds: [{type: Schema.Types.ObjectId, ref: 'Part'}], }); var PartSchema = new Schema({ name: {type: String}, otherIds: [{type: Schema.Types.ObjectId, ref: 'Other'}], }); var OtherSchema = new Schema({ name: {type: String} }); 当我查询汽车时,我可以填充零件: Car.find().populate('partIds').exec(function(err, cars) { // list of cars with partIds populated }); 有没有mongoose的方式来填充所有汽车的嵌套零件对象otherIds。 Car.find().populate('partIds').exec(function(err, cars) { // […]

在node.js中为现有的json对象添加一个新的属性

我有这样的对象 ==================records=========={ Id: 5114a3c21203e0d811000088, userId: 'test', sUserId: test, userName: 'test', url: 'test', Title: 'test' } 我需要添加一个新的字段名称:'testing'到上面的logging,我试图给logging。名称=名称,它没有工作。 请帮助 谢谢,Prats

如何摆脱错误:“OverwriteModelError:不能覆盖`一旦编译未定义的模型。”?

我有一个更新MongoDB中任何集合文档的常用方法? 以下代码的文件名为Deleter.js module.exports.MongooseDelete = function (schemaObj, ModelObject); { var ModelObj = new mongoose.Model("collectionName",schemaObj); ModelObj.remove(ModelObject); } 并在我的主文件app.js中调用如下: var ModObj = mongoose.model("schemaName", schemasObj); var Model_instance = new ModObj(); var deleter = require('Deleter.js'); deleter.MongooseDelete(schemasObj,Model_instance); 我收到以下错误: OverwriteModelError: Cannot overwrite `undefined` model once compiled. at Mongoose.model (D:\Projects\MyPrjct\node_modules\mongoose\lib\index.js:4:13) 我只有第二个方法调用。请让我知道如果有任何人有一些解决scheme。

从Node HTTP请求中运行的algorithm需要更长的时间才能运行

我有一个节点的应用程序,绘制在一个x,y点图的数据。 目前,我从前端发出GET请求,后端节点服务器接受请求,循环访问数据点arrays,使用Node Canvas绘制canvas,并将其传回到显示为PNG图像的前端。 复杂的事情是可以有多边形,所以我的algorithm计算一个点是否在一个多边形内,使用多边形包中的点 ,以及数据点的颜色,如果它是不同的。 这在less于50,000个数据点的情况下工作正常。 但是,如果有80万个请求需要大约23秒。 我已经对代码进行了剖析,大部分时间都是循环遍历所有的数据点,并找出在canvas上绘制的位置以及颜色(取决于它是否在一个或多个多边形中)。 这是我做的一个笨蛋 。 基本上我做这样的事情: for (var i = 0; i < data.length; i++) { // get raw points x = data[i][0]; y = data[i][1]; // convert to a point on canvas pointX = getPointOnCanvas(x); pointY = getPointOnCanvas(y, 'y'); color = getColorOfCell(pointX, pointY); color = color; plotColor.push({ color: color, […]

unit testing与mongoose

我是Node.js,Mongoose和在这个环境中testing的新手。 我有以下模式在一个单独的文件中声明。 Issue = mongoose.model("Issue", { identifier: String, date: String, url: String, name: String, thumbnailURL: String }); 然后我有这个方法,它只是返回MongoDB集合中的所有Issue实例。 function issues(request, response) { response.setHeader('Content-Type', 'text/json'); Issue.find().sort('date').exec(function(error, items) { if (error) { response.send(403, {"status": "error", "error:": exception}); } else { response.send(200, {"issues": items}); } }); } 我已经通过实验得到了很多,现在我想testing它,但是我遇到了一个问题。 我怎么去testing它,而没有build立一个MongoDB连接等。我知道我可以设置所有的东西,但这是一个集成testing。 我想编写unit testing来testing如下的东西: 函数是否正确设置内容types 函数按date字段进行sorting 发生错误时函数是否返回403? … 等等 我很好奇,看看我可以重构我现有的代码,使其更容易testing。 我已经尝试过创build第二个被调用的函数,接受response和Item模式对象作为参数,但是感觉不对。 […]