Articles of mongoose

对MongoDB的重复NodeJS请求最终减速

我有数据进入mongodb集合rmc ,它被插入,即我有一个最新的纬度和经度为我的设备点。 从Node.js我想每隔100 ms查询该集合(模拟实时),并更新与更新的经度/纬度的地图。 一开始我的performance很好,但是在更新了我的collections或者一段时间之后,性能开始变得非常糟糕。 我究竟做错了什么? 我能以更好的方式做事吗? 我似乎无法弄清楚,如果MongoDB或Node ,或Mongoose 。 用户转到index.html ,它获取一个HTML页面。 在HTML中,我每100 ms请求一个页面: function updateData() { $.getJSON("/data", function(json) { dosomething() interval = setTimeout(updateData, 100); }) }; updateData(); 和我的index.js: /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: "test" }); }); router.get('/data', function(req, res, next) { var db = req.db; Json.find({}).select({}).lean().exec(function(e,docs){ […]

$ inc follower count,还是我应该使用聚合来跟踪它们?

我通过无限滚动的方式一次加载12个产品。 有时候,我可能想通过他们有多less追随者来分类。 以下是我跟踪每个产品有多less追随者。 下面是一个单独的收集,因为16mb的数据上限,以下的金额应该是无限的。 遵循模式: var FollowSchema = new mongoose.Schema({ user: { type: mongoose.Schema.ObjectId, ref: 'User' }, product: { type: mongoose.Schema.ObjectId, ref: 'Product' }, timestamp: { type: Date, default: Date.now } }); 遵循模式的产品: var ProductSchema = new mongoose.Schema({ name: { type: String, unique: true, required: true }, followers: { type: Number, default: 0 } }); […]

如何更新mongoose?

我是新的在Mongoose / nodejs和我挣扎着一个数组中的数组的简单更新。 这是架构: var County = new Schema({ _id : Schema.ObjectId, name : String, biggestCity : String }); var Country = new Schema({ _id : Schema.ObjectId, name : String, counties : {type: [County], ref: "County"} }); var Continent = new Schema({ _id : Schema.ObjectId, countries : {type: [Country], ref: "Country"}, }); 以下是我一直在尝试的更新代码: var continents […]

当值是对象时,Mongoose虚拟设置函数不被调用

我有一个混合types的虚拟mongoose模式。 例如: var mongoose = require('mongoose') // version 3.3.1 var FooSchema = new mongoose.Schema( { x: Number } ); FooSchema.virtual('v').set( function(value){ console.log("SETTING", value); }); var Foo = mongoose.model('Foo', FooSchema); new Foo( { v:1 } ); new Foo( { v:[] } ); new Foo( { v:{} } ); 当我运行这个代码时,我得到: SETTING 1 SETTING [] 你会注意到它永远不会显示“设置{}”,为什么这不起作用的任何理由? 参考Github上的问题

删除mongoose中embedded的文件

我是node.js和MongoDB的新手。 我正在使用Mongoose库通过node.js访问MongoDB。 我有两个模式,书和作者。 作者belongs_to书和书has_many作者。 我在我的模式中有这个: var mongoose = require( 'mongoose' ); var Schema = mongoose.Schema; var Book = new Schema({ title : String, isbn : String, authorId : [{ type: Schema.Types.ObjectId, ref: 'Author' }], updated_at : Date }); var Author = new Schema({ name : String, updated_at : Date }); mongoose.model( 'Book', Book ); mongoose.model( […]

Mongoose模式inheritance和模型填充

我一直试图用内置的mongoose(而不是扩展插件)的inheritancefunction,但迄今没有多less运气。 这是我试图使用的代码的一个简化的例子,展示了同样的问题。 这是基于使用鉴别器的模式inheritance的mongoose文档的扩展版本 – http://mongoosejs.com/docs/api.html#model_Model.discriminator var util = require('util'); var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/problem'); var Schema = mongoose.Schema; var ObjectId = Schema.ObjectId; function BaseSchema() { Schema.apply(this, arguments); this.add({ name: String, createdAt: Date }); } util.inherits(BaseSchema, Schema); var BossStatusSchema = new Schema({ status: String }); var BossStatus = mongoose.model('BossStatus', BossStatusSchema); var PersonSchema = new BaseSchema(); var […]

什么是最好的做法“连接”mongoose/蒙古的一堆价值没有填充

让我首先说明我知道mongoose提供的方法,但是由于我的工作决定将来转向本地的mongodb驱动程序,所以我不能再依靠填充来避免自己为后者工作。 如果我有两个文档集合 People {_id:1, name:Austin} {_id:2, name:Doug} {_id:3, name:Nick} {_id:4, name:Austin} Hobbies: {Person: 1, Hobby: Cars} {Person:1, Hobby: Boats} {Person:3, Hobby: Chess} {Person:4, Hobby: Cars} 我应该怎么去join爱好者的每个文件。 理想情况下,我宁愿只需要调用数据库两次来获得人员,第二次获得业余爱好,然后返回到客户端应用程序对象与他们jointoeghter。

Mongo DB – 具有位置和场半径的地理空间查询(内部字段比较)

在我的项目中有两个要求 第一个 :我有下面的集合 { "name": "James", "loc" : [ 12.9000, 14.6733] }, { "name": "James", "loc" : [ 54.9000, 78.6733] } 为此,我必须find与我的位置相匹配的所有位置,以便使用此查询: var myLoc = [ 13.5, 67.5 ]; var myRadius = 150; model.find({ loc : { $geoWithin : { $centerSphere : [ myLoc, myRadius ] } } } ).exec() 上述查询工作正常。 第二个 :我有下面这个集合,我面临问题。 { "name" […]

如何制作和存储邮件标题的slu??

我使用MongoDB / mongoose来存储具有以下模式的博客文章: PostSchema = mongoose.Schema({ title: {type: String}, body: {type: String} }); 现在我的posturl如下所示: http://www.example.local/posts/571f78d077b4454bafcfcced 我想我的post包含slu like如下: http://www.example.local/posts/571f78d077b4454bafcfcced/how-to-make-and-store-slug-for-title 所以我的问题是: 我应该生成一次slug和存储PostModel架构或每个post上显示? 如何为标题(现有的节点模块解决这个任务)生成slug basen非ASCII字符? 我应该使用什么地方将查询从http://www.example.local/posts/571f78d077b4454bafcfccedredirect到http://www.example.local/posts/571f78d077b4454bafcfcced/how-to-make-and-store-slug-for-title (nodejs,nginx,客户端)。 谢谢! EIDT:我也发现,在StackOverflow数据库viwer的问题与ID 503429 SO存储non slugged标题。 那么这是否意味着SO在每次请求问题时都会计算出slu g?

跳过时间戳中间件在Mongoose中的某些更新

我的应用程序使用Mongoose,并有一个使用时间戳选项的模式: var fooSchema = new Schema({ name: String, }, { timestamps: true, }); mongoose.model('Foo', fooSchema); 所以,无论何时将更新写入集合, updatedAt属性都会更改为当前date。 但是现在我想添加一些不应该更新updatedAt属性的更改。 一些Stackoverflow( 示例 )的答案build议使用Foo.collection作为涉嫌访问本地MongoDB驱动程序。 所以我试过这个: Foo.collection.update({ _id: someFooId }, { $set: { name: 'New Name' } }); 但是,那也改变了updatedAt属性。 那么如何更新文档, 而不更改updatedAt ?