我并不是指删除文件或文件.我的意思是完全删除模型,以便猫鼬不再意识到它.在声明模型之后,我无法弄清楚如何让mongoose忘记该模型以便可以重新创建它.
mongoose.model('Book', bookSchema);
mongoose.model('Book', bookSchema);
Run Code Online (Sandbox Code Playgroud)
目前上面抛出一个例外.
OverwriteModelError:编译后无法覆盖'Book'模型.
我希望能做到这样的事......
mongoose.model('Book', bookSchema);
mongoose.removeModel('Book');
mongoose.model('Book', bookSchema);
Run Code Online (Sandbox Code Playgroud)
......而且没有任何错误.有任何想法吗?
如何使用 nestjs 实现 mongoose 插件?
import * as mongoose from 'mongoose';
import uniqueValidator from 'mongoose-unique-validator';
import mongoosePaginate from 'mongoose-paginate';
import mongoose_delete from 'mongoose-delete';
const UsuarioSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
required: [true, 'El nombre de usuario es requerido']
},
password: {
type: String,
required: [true, 'La clave es requerida'],
select: false
}
});
UsuarioSchema.plugin(uniqueValidator, { message: '{PATH} debe ser único' });
UsuarioSchema.plugin(mongoosePaginate);
UsuarioSchema.plugin(mongoose_delete, { deletedAt : true, deletedBy : true, overrideMethods: true });
Run Code Online (Sandbox Code Playgroud)
错误:第一个参数schema.plugin()必须是一个函数,得到“未定义”
我在Mongoose> = 4.4中找不到任何涉及自定义对象(或值对象)的高级 自定义模式类型的示例.
想象一下,我想使用自定义类型,如:
function Polygon(c) {
this.bounds = [ /* some data */ ];
this.npoints = /* ... */
/* ... initialize polygon ... */
};
Polygon.prototype.area = function surfaceArea() { /**/ };
Polygon.prototype.toObject = function toObject() { return this.bounds; };
Run Code Online (Sandbox Code Playgroud)
接下来,我实现了一个自定义SchemaType,如:
function PolygonType(key, options) {
mongoose.SchemaType.call(this, key, options, 'PolygonType');
}
PolygonType.prototype = Object.create(mongoose.SchemaType.prototype);
PolygonType.prototype.cast = function(val) {
if (!val) return null;
if (val instanceof Polygon) return val;
return new Polygon(val)
}
PolygonType.prototype.default = …Run Code Online (Sandbox Code Playgroud) 我收到以下错误: -
[Error: text search not enabled]
Run Code Online (Sandbox Code Playgroud)
我正在运行folliowing函数,它本质上是一个mongoose-mongodb操作.
var textSearch = require('mongoose-text-search');
exports.dbTextSearch = function () {
console.log('dbTextSearch');
var gameSchema = mongoose.Schema({
name: String
, tags: [String]
, likes: Number
, created: Date
});
gameSchema.plugin(textSearch);
gameSchema.index({ tags: 'text' });
var Game = mongoose.model('Game', gameSchema);
Game.create({ name: 'Super Mario 64', tags: ['nintendo', 'mario', '3d'] }, function (err) {
Game.textSearch('3d', function (err, output) {
if (err) return console.log(err); // this outputs the error.
var inspect = require('util').inspect;
console.log(inspect(output, { depth: null })); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用mongoose> 4.0.0的新不稳定版本来验证更新查询.
说我想使用以下查询更新架构
schema.update({_id:'blah'},{a:'blah'},function(err){
//do your thing
})
Run Code Online (Sandbox Code Playgroud)
所以我说我有以下架构,
var schema = new Schema({
a:{type:String}
});
schema.pre('update',function(next){
var findQuery=this._conditions; // gives {_id:'blah'}
// how do i get {a:'blah'}????
next();
});
Run Code Online (Sandbox Code Playgroud)
如何在预中间件中获得{set:{a:'blah'}}的更新查询,以便在执行更新之前进行一些检查?
或者我知道更新查询可以在后中间件中访问
schema.post('update',function(){
var findQuery=this._conditions; // gives {_id:'blah'}
var updateQuery=this._update; //gives {$set:{a:'blah'}}
next();
});
Run Code Online (Sandbox Code Playgroud)
但为时已晚,我需要在预先中间件中进行检查才能实际更新数据库.
我尝试查看预中间件的'this'对象,但无法在任何地方找到updateQuery对象,并且this._update在预中间件中未定义.
有没有办法做到这一点?谢谢
我想我的排序Group由-模型name的departure_country与猫鼬,PAGINATE和的NodeJS.
我的小组 - 架构:
var GroupSchema = new Schema({
name: String,
flight_date: Date,
....
departure_country: {type: Schema.ObjectId, ref: 'Country'},
....
});
Run Code Online (Sandbox Code Playgroud)
在乡村架构:
var CountrySchema = new Schema({
name: String,
code: String,
});
Run Code Online (Sandbox Code Playgroud)
使用国家的sortBymongoose-paginate排序 - _ids我不知道如何告诉它按照排序name.
我在 mongoose 中有一个插件,对于每个模式,我都在执行以下操作
var user = new Schema({});
user.plugin(myplugin);
user.statics.createCustomDoc = function() {
.....
}
Run Code Online (Sandbox Code Playgroud)
问题是 myplugin 中也定义了 createCustomDoc 方法。现在我想createCustomDoc用定义为 user.statics.createCustomDoc 的方法覆盖myplugin。
目前调用的方法来自插件而不是我在 user.statics.createCustomDoc 中编写的方法。
我怎么做。?
当然,我不想更改函数名称,也不想删除插件,也不想更改插件代码。
我正在创建一个mongoose模式如下:
var adminSchema = new mongoose.Schema({
email:{type:String,unique:true,required:true},
passwordHash:{type:String},
isActivated:{type:Boolean},
admin_id:{type:Number,unique:true}
});
adminSchema.plugin(autoIncrement.plugin(),{model:'adminSchema',
field:'admin_id',
startAt:1,
incrementBy:1});
Run Code Online (Sandbox Code Playgroud)
当我尝试运行该应用程序时,我收到一个错误说:
if (!counterSchema || !IdentityCounter) throw new Error("mongoose-auto-increment has not been initialized");
^
Error: mongoose-auto-increment has not been initialized
at Object.exports.plugin (/Users/kumar/WebstormProjects/code-master/node_modules/mongoose-auto-increment/index.js:36:49)
at Object.<anonymous> (/Users/kumar/WebstormProjects/code-master/models/admin.js:22:34)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Module.require (module.js:366:17)
at require (module.js:385:17)
at Object.global.App.require (/Users/kumar/WebstormProjects/code-master/app.js:23:16)
at Object.global.App.model (/Users/kumar/WebstormProjects/code-master/app.js:32:21)
at init (/Users/kumar/WebstormProjects/code-master/app/initializers/passport.js:6:15)
at Object.<anonymous> (/Users/kumar/WebstormProjects/code-master/app.js:66:44)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at …Run Code Online (Sandbox Code Playgroud) 将插件添加到我的架构后,我在控制器中使用 paginate 时遇到问题,我的代码是用 TypeScript 2.1 编写的,我在 devdependencies 中安装了 @types/mongoose-paginate。
[ts] 严重性:“错误”消息:“类型“模型”上不存在“属性”分页“。”
我的控制器:
export function getAllArtists(req, res) {
Artist.paginate({}, { page: 3, limit: 10 }, function(err, result) {
// ...
// ...
});
Run Code Online (Sandbox Code Playgroud)
我的架构:
'use strict'
import {Document, model, Model, Schema} from 'mongoose';
import * as mongoosePaginate from 'mongoose-paginate';
interface IArtist extends Document {
name: String;
description: String;
image: String;
}
const ArtistSchema: Schema = new Schema({
name: String,
description: String,
image: String
});
ArtistSchema.plugin(mongoosePaginate);
export const ArtistModel: Model<IArtist> = model<IArtist>('Artist', …Run Code Online (Sandbox Code Playgroud) mongoose ×9
node.js ×8
mongodb ×6
express ×1
javascript ×1
nestjs ×1
pagination ×1
typescript ×1