Articles of mongoose schema

跳过时间戳中间件在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 ?

Mongoose select:false不适用于位置嵌套对象

我希望我的模式的location字段默认隐藏。 我添加了select: false属性,但在select文档时总是返回… var userSchema = new mongoose.Schema({ cellphone: { type: String, required: true, unique: true, }, location: { 'type': { type: String, required: true, enum: ['Point', 'LineString', 'Polygon'], default: 'Point' }, coordinates: [Number], select: false, <– here }, }); userSchema.index({location: '2dsphere'}); 打电话时: User.find({ }, function(err, result){ console.log(result[0]); }); 输出是: { cellphone: '+33656565656', location: { […]

Mongoose高级自定义模式对象types

在Mongoose> = 4.4中,找不到涉及自定义对象(或值对象 )的高级 自定义模式types的任何示例。 想象一下,我想要使用一个自定义types,如: function Polygon(c) { this.bounds = [ /* some data */ ]; this.npoints = /* … */ /* … initialize polygon … */ }; Polygon.prototype.area = function surfaceArea() { /**/ }; Polygon.prototype.toObject = function toObject() { return this.bounds; }; 接下来,我实现了一个自定义的SchemaType,如: function PolygonType(key, options) { mongoose.SchemaType.call(this, key, options, 'PolygonType'); } PolygonType.prototype […]

node.js服务器是否需要互联网连接才能运行?

我禁用了互联网连接并运行节点服务器npm start ,然后抛出错误: 而现在启用互联网连接和运行服务器工作正常: 那么,我想确认在启动服务器时是否真的需要连接到互联网? 如果真的需要互联网连接,那么有没有想法离线运行服务器? 如果我连接到互联网,并运行服务器,并在那里插上互联网连接,然后没有任何问题。 一切工作正常。 我不知道为什么只是运行服务器需要互联网连接。

在mongoose虚拟,这是空的对象

好吧,我是新来的mongoose,并试图了解如何使用虚拟属性。 这是我一直在testing的示例代码。 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var objSchema = new Schema({ created: {type: Number, default: Date.now()}, }); objSchema.virtual('hour').get(()=>{ //console.log(this); var d = new Date(this.created); return d.getHours(); }); var obj = mongoose.model('obj', objSchema); var o = new obj(); o.toObject({virtuals: true}); console.log(o.created); console.log(o.hour); 所以我希望日志是这样的: 1457087841956 2 但输出是 1457087841956 NaN 当我在虚拟获得者的开始处logging“this”时,它会打印{}。 我究竟做错了什么?

MongoDB / Mongoose时间戳不更新

架构: var schema = new Schema({…}, { timestamps: true, id: false, toJSON: { virtuals: true, }, toObject: { virtual: true, } }); schema.virtual('updated').get(function () { if(typeof this.updatedAt === "undefined" && typeof this.createdAt === "undefined") return ""; var updated = (typeof this.updatedAt === "undefined") ? this.createdAt : this.updatedAt; return "Updated "+moment(updated).fromNow(); }); 此代码最近工作 – updatedAt为特定的实例8月24日,但对文档的任何新的编辑不会更新时间戳。 感觉像我在这里错过了一些非常愚蠢的东西。

在Mongoose中间件方法之间共享数据前保存和后保存

查看更新示例代码@底部 我在当前的NodeJS项目中使用了Mongoose(这很棒btw!),我有一个MDB集合,它将文档的更改存储在不同的集合中(基本上是一个更改日志,用于存储已修改的内容) 我试图做到这一点是创build一个函数,存储一个JSON版本的文件,这是通过pre('save')钩完成。 然后创build另一个钩子,通过post('save') ,比较存储在pre('save') ,并将其与文档新数据进行比较。 inheritance人到目前为止: var origDocument var testVar = 'Goodbye World' module.exports = ( schema, options ) => { schema.pre( 'save', function( next ) { // Store the original value of the documents attrCache.Description value origDocument = this.toJSON().attrCache.Description // Change the testVar value to see if the change is reflected in post(save) […]

带有一对多关系的Mongoose文档引用

我正在为一个新项目devise一个数据库结构,而且我对MongoDB很陌生,显然是Mongoose。 我已经阅读了Mongooses 人口文档,它有一个一对多的关系,一个Person文档到很多Story文档,但是让我困惑的部分是在哪里,而不是Story文档引用什么Person文档, Person模式已经设置好了,所以它有一个它拥有的Story文档的数组。 我正在build立一个非常相似的东西。 但我一直认为创build具有Person文档ID的新Story文档会更容易。 但也许这只是因为我更熟悉使用连接的MySQL关系。 如果这是做这件事的最好方法(我敢肯定,自从它在文档中),当创build新的Story文档时,更新它所属的关联的People文档中的故事数组的最佳方式是什么? ? 我看了,但找不到更新现有文档的任何示例,以添加对其他文档的引用(或删除它们) 我确信这是一个简单的解决scheme,我只是忽略了什么,但任何帮助将是伟大的。 谢谢!