标签: mongoose-schema

如何访问附加到猫鼬模式的方法

我在调用我正在处理的项目中附加到架构的方法时遇到一些困惑。我本质上是从数据库访问文档,并尝试将我存储的散列密码与用户在登录时提交的密码进行比较。然而,当我尝试比较密码时,我附加到模式的方法对象的方法却找不到。它甚至不会向我抛出错误,告诉我没有这样的方法。这是我在架构上设置方法的地方:

var Schema = mongoose.Schema;

var vendorSchema = new Schema({
  //Schema properties
});

vendorSchema.pre('save', utils.hashPassword);
vendorSchema.methods.verifyPassword = utils.verifyPassword;

module.exports = mongoose.model('Vendor', vendorSchema);
Run Code Online (Sandbox Code Playgroud)

我用作比较方法的函数是我创建的实用程序函数,名为 verifyPassword,它保存在实用程序文件中。该函数的代码在这里:

verifyPassword: function (submittedPassword) {
    var savedPassword = this.password;

    return bcrypt.compareAsync(submittedPassword, savedPassword);
  }
Run Code Online (Sandbox Code Playgroud)

我尝试像这样验证密码:

    var password = req.body.password;
    _findVendor(query)
        .then(function (vendor) {

          return vendor.verifyPassword(password);
        });
Run Code Online (Sandbox Code Playgroud)

我已经向猫鼬承诺了蓝鸟的承诺,如果这有什么区别的话。我已经尝试了很多方法,但找不到任何答案来解释为什么当我尝试调用这个我认为已附加架构的方法时什么也没有发生。任何帮助将不胜感激。

mongoose mongodb node.js mongoose-schema

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

将哈希图保存到猫鼬?

我有一个像这样的架构

var csData = new Schema({
    csgo_number: Number,
    last_updated: Number,
    items: {type: Object, default: {}}

}, { minimize: false });
Run Code Online (Sandbox Code Playgroud)

由于项目是一个很大的列表,我决定将其设为哈希映射以更快地访问它。

items:{
    item1: {
        price: 2.00
    },
    item2:{
        price: 1.00
    },
    item3:{
        price: 3.00
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在循环浏览一堆 html,当我遇到每个新项目时,我正在解析和存储它。

var item1 = 'awp'
csData.findOne({"csgo_number": 1}, function(err, csgoDB){
    csgoDB.items[item1] = {
        price: 2.00
    }


    csgoDB.save(function(err){
        if(err){console.log('something went wrong')}
    });
});
Run Code Online (Sandbox Code Playgroud)

尽管我没有收到任何错误。我的数据没有保存。这是因为我的新商品没有 _id 吗?我用 _id 尝试过,但仍然没有保存。

mongoose node.js mongoose-schema

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

Mongoose 可选的最小长度验证器?

我怎样才能有一个string带有minlength. 文档(链接在这里)没有详细介绍这一点?我已经试了:

var schema = mongoose.Schema({
    name: { type: String, required: true, maxlength: 255 },
    nickname: { type: String, minlength: 4, maxlength: 255 }
});
Run Code Online (Sandbox Code Playgroud)

我尝试的每个变体都会返回某种类型的错误。

我的目标是评估minlength并且maxlength 仅当已提供该值时。

mongoose mongodb node.js mongoose-schema

3
推荐指数
2
解决办法
2万
查看次数

使用 Mongoose populate() 清理死引用

如果用户有一个名为“tags”的数组:

var User = new Schema({
    email: {
        type: String,
        unique: true,
        required: true
    },
    tags: [{
        type: mongoose.Schema.Types.ObjectId,
        ref:'Tag',
        required: true
    }],
    created: {
        type: Date,
        default: Date.now
    }
});
Run Code Online (Sandbox Code Playgroud)

我对查询执行 populate('tags') :

User.findById(req.params.id)
    .populate("tags")
    .exec(function(err, user) { ... });
Run Code Online (Sandbox Code Playgroud)

如果列表中的标签之一实际上已被删除,是否有办法删除“标签”中的这个死引用?

目前,返回的用户对象正在返回所需的结果——即。只有实际存在的标签才存在于标签数组中...但是,如果我查看 mongodb 中的底层文档,它仍然包含数组中的死标签 id。

理想情况下,我想懒惰地清理这些引用。有谁知道这样做的好策略?

mongoose mongodb mongoose-populate mongoose-schema

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

Mongoose document.populate() 不起作用

我正在使用一个非常简单的 Node/Mongo/Express 设置,并尝试填充引用的文档。考虑我的“课程”模式,其中包含“周”:

// define the schema for our user model
var courseSchema = mongoose.Schema({

    teachers        : { type: [String], required: true  },
    description     : { type: String              },
    previous_course : { type: Schema.Types.ObjectId, ref: 'Course'},
    next_course     : { type: Schema.Types.ObjectId, ref: 'Course'},
    weeks           : { type: [Schema.Types.ObjectId], ref: 'Week'},
    title           : { type: String              }

});

// create the model for Course and expose it to our app
module.exports = mongoose.model('Course', courseSchema);
Run Code Online (Sandbox Code Playgroud)

我特别想填充我的几周数组(尽管当我将模式更改为一周时,populate()仍然不起作用)。

这是我一周的计划(一门课程有多个):

var weekSchema = …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongoose-populate mongoose-schema

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

使用猫鼬生成自动增量字段?

我有一个数据库,它由四个字段 id、text、key、status 组成。我想添加另一个名为 order 的字段,它由一个数字组成,它是订单的表示。我也有删除文档的功能,因此删除顺序不会连续,我也希望顺序连续且不重复。如果从数据库中删除了某些文档,则根据数据库中的文档数量自动调整顺序。我有两个文件 index.js 和 items.js。我使用过猫鼬、body-parser 和 expressjs。

我的订单字段是非重复和连续的。

索引.js

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var cors = require('cors');

app.use(bodyParser.json());
app.use(cors());

Items = require('./items.js');

mongoose.connect('mongodb://localhost/taskDb');
var db = mongoose.connection;

app.get("/", (req, res) => {
    res.send('Visit /api/*****');
});

app.get("/api/items", (req, res) => {
    Items.getItems(function (err, items) {
        if (err) {
            throw err;
        }
        res.json(items);
    });
});

app.post("/api/items", (req, res) => {
    var item = req.body;
    console.log(item + "item …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose node.js express mongoose-schema

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

find后确定鉴别器类型的正确方法

我想使用正确的猫鼬模型来表示具有多个鉴别器的文档。

\n\n

假设我有以下模型:

\n\n
const membershipSchema = mongoose.Schema({\n  name: { type: String, required: true },\n  course: { type: mongoose.Schema.Types.ObjectId, ref: 'Course' },\n  price: { type: Number, required: true, get: p => `\xc2\xa3${p}.00` }\n}, { discriminatorKey: 'type' });\n\nconst subscriptionSchema = mongoose.Schema({\n  frequency: {\n    type: String, enum: [ 'week' , 'month' ],\n    required: true, get: val => `${val}ly subscription` }\n})\n\nconst ticketSchema = mongoose.Schema({\n  frequency: { type: String, default: 'one-off' }\n});\n\nconst Membership = mongoose.model('Membership', membershipSchema);\nconst Subscription = Membership.discriminator('Subscription', subscriptionSchema);\nconst Ticket = Membership.discriminator('Ticket', ticketSchema);\n\nmodule.exports …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js mongoose-schema

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

猫鼬搜索多个字段

全部,

尝试使用 NodeJS 和 Mongoose 实现简单搜索。

不太确定我哪里出错了,尝试像这样构建查询:

const query = Post.find();
if (value.searchQuery && value.city && value.category) {

        console.log("city and category");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery }],
            city: value.city,
            category: value.category
        });

    } else if (value.searchQuery && value.city && !value.category) {

        console.log("No category");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery }],
            city: value.city
        });

    } else if (value.searchQuery && value.category && !value.city) {

        console.log("No city");
        query.where({
            $or: [{ title: value.searchQuery }, { description: value.searchQuery …
Run Code Online (Sandbox Code Playgroud)

search full-text-search mongoose node.js mongoose-schema

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

类型“文档”缺少类型中的以下属性

所以我有一个 Node /w Typescript REST API,我有注册方法,它创建一个用户并使用创建的用户 firstName、lastName、email 进行响应。

问题是我遇到了这个打字稿错误,上面写着“类型‘文档’缺少‘SavedUser’类型中的以下属性:firstName、lastName、email”。

我相信它在我的 SavedUser 界面中添加 mongoose.Document 类型,我不确定,谢谢你的帮助!

错误截图: 在此处输入图片说明

示例代码:

    interface SavedUser {
        firstName: string 
        lastName: string
        email: string
    }

    ...

    public async signUp(req: Request, res: Response): Promise<void | Response> {
        const salt: string = await bcrypt.genSalt(10)
        const hashedPassword: string = await bcrypt.hash(req.body.password, salt)

        const user = new User({
            firstName: req.body.firstName,
            lastName: req.body.lastName,
            email: req.body.email,
            password: hashedPassword
        })

        try {
            const { firstName, lastName, email }: SavedUser = await user.save()

            return res.status(200).send({
                firstName,
                lastName, …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose node.js typescript mongoose-schema

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

Mongoose 查询一个数组包含另一个数组中的某个值

在 Mongoose 中如何检查一个数组的元素是否属于另一个数组?例如我有一个文档:

const userSchema = new mongoose.Schema({
name: String,
favor:Array
})

user1 = {
name:'John',
favor : ['banana', 'apple', 'eggs'].
}

user 2= {
name:'Ethan',
favor : ['apple', 'eggs'].
}
Run Code Online (Sandbox Code Playgroud)

我有一个数组

const array = ['eggs', 'banana']
Run Code Online (Sandbox Code Playgroud)

我想获取user1。我该如何处理猫鼬?

mongoose mongodb mongodb-query mongoose-schema

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