标签: mongoose-plugins

你如何从猫鼬中删除模型?

我并不是指删除文件或文件.我的意思是完全删除模型,以便猫鼬不再意识到它.在声明模型之后,我无法弄清楚如何让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)

......而且没有任何错误.有任何想法吗?

javascript mongoose mongodb node.js mongoose-plugins

12
推荐指数
2
解决办法
5034
查看次数

猫鼬插件 nestjs

如何使用 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 node.js mongoose-plugins nestjs

8
推荐指数
2
解决办法
5973
查看次数

Mongoose高级自定义架构对象类型

我在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)

mongoose mongodb node.js mongoose-plugins mongoose-schema

7
推荐指数
1
解决办法
1082
查看次数

错误:未启用文本搜索: - 在mongodb中

我收到以下错误: -

[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 mongodb node.js mongoose-plugins

6
推荐指数
2
解决办法
5154
查看次数

在mongoose预中间件中,如何访问更新查询?

我正在尝试使用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在预中间件中未定义.

有没有办法做到这一点?谢谢

mongoose mongodb node.js express mongoose-plugins

6
推荐指数
1
解决办法
2471
查看次数

mongoose-paginate按引用文档排序

我想我的排序Group由-模型namedeparture_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.

pagination mongoose mongodb node.js mongoose-plugins

5
推荐指数
1
解决办法
690
查看次数

如何覆盖猫鼬插件的功能?

我在 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 mongodb node.js mongoose-plugins

5
推荐指数
1
解决办法
703
查看次数

错误:mongoose-auto-increment尚未初始化

我正在创建一个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)

mongoose node.js mongoose-plugins

3
推荐指数
1
解决办法
4184
查看次数

在插件中导入架构后调用“分页”时出错

将插件添加到我的架构后,我在控制器中使用 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 typescript mongoose-plugins mongoose-schema

3
推荐指数
1
解决办法
2745
查看次数