标签: mongoose-schema

猫鼬文档中的索引

我正在开发一个搜索功能,其中我必须搜索文档中的多个字段。

我有以下案例:

1)获取field1,field2,field3,field4与字符串(nayyar)匹配的所有文档

2) 获取 field1、field2、field3、field4 与字符串 (nayyar) 匹配且性别应为(输入值)或“N/A”的所有文档。

3) 获取 field1、field2、field3、field4 与字符串 (nayyar) 匹配的所有文档,并且年龄应在ageHigh 和ageLow 之间,并且性别应为(输入值)或“N/A”。

4) 获取 field1、field2、field3、field4 与字符串 (nayyar) 匹配的所有文档,并且年龄应在ageHigh 和ageLow 之间,并且性别应为(输入值)或“N/A”,并且 ArrayField 在“atoz”中。

var Schema = new Schema({
lowAge          :   {
                        type: Number, 
                        default: 0 
                    },
highAge         :   {
                        type: Number, 
                        default: 0
                    },
gender          :   {
                        type: String,
                        default: 'N/A'
                    },
field1          :   {
                        type: String
                    },
field2          :   {
                        type: String
                    },
field3          :   {
                        type: String
                    },
field4          :   {
                        type: String
                    }, …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongoose-schema

0
推荐指数
1
解决办法
1329
查看次数

如何创建具有特定值的猫鼬唯一索引?

我有TradeRequest使用以下架构 命名的集合

const TradeRequestSchema = mongoose.Schema({
  status: {
    type: String,
    enum: ["opened", "rejected", "accepted"],
    default: "opened"
  },

  _requester: {
    required: true,
    type: mongoose.Schema.Types.ObjectId
  },

  _requestedBook: {
    required: true,
    type: mongoose.Schema.Types.ObjectId
  }
});
Run Code Online (Sandbox Code Playgroud)

我的数据库应该只有一个任何人对一本书的开放请求。
所以我添加了一个唯一索引,如下所示 -

TradeRequestSchema.index({_requester: 1, _requestedBook: 1, status: 1}, {unique: true});
Run Code Online (Sandbox Code Playgroud)

问题是这会阻止一些本应允许的数据输入到数据库中。

例如,它阻止我的数据库包含以下文档,这对于我的用例来说很好 -

{_id: 1, _requester: 12345, _requestedBook: 9871212, status: "opened"}
{_id: 2, _requester: 12345, _requestedBook: 9871212, status: "opened"}
Run Code Online (Sandbox Code Playgroud)

但它也可以防止以下情况对我的用例来说是错误的。

例如,如果我的数据库已有以下文档 -

{_id: 3, _requester: 12345, _requestedBook: 9871212, status: "closed"}
{_id: 4, _requester: 12345, …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongoose-schema

0
推荐指数
1
解决办法
1122
查看次数

猫鼬到期

我有以下架构:

ip: String,
port: Number,
msgboard: [{
   date: {
        type: Date,
        default: Date.now,
        expires: 120
        },
   msg: String
}]
Run Code Online (Sandbox Code Playgroud)

我希望消息在创建 120 秒后自动删除。但上面的删除是整个文档,而不仅仅是 msgboard 中的子文档。我一直在使用 cron 并运行一个函数来做到这一点,但代码看起来太不整洁了。有没有内置的方法?

mongoose mongodb node.js mongoose-schema

0
推荐指数
1
解决办法
3032
查看次数

Express JS mongoose model.find 在 es6 中未定义

这是我的模型

import mongoose from 'mongoose';

const Schema = mongoose.Schema;

var userSchema = new Schema({
    name:  String,
    email: String,
    provider:String,
    role:String
  });

  export default mongoose.model('user',userSchema);
Run Code Online (Sandbox Code Playgroud)

在我的控制器中

 import {UserModel} from './model'

 async getUser(req,res){

      UserModel.find((err,result)=>{
          console.log("Error",err);
      })
  }
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

类型错误:无法读取未定义的属性“查找”

javascript mongodb node.js express mongoose-schema

0
推荐指数
1
解决办法
966
查看次数

Mongodb 用不同的值更新多个文档

我一直在尝试updatemany与猫鼬一起使用。我想使用对象数组更新数据库中的值。

[
            {
                "variantId": "5e1760fbdfaf28038242d676",
                "quantity": 5

            },
            {
                    "variantId": "5e17e67b73a34d53160c7252",
                    "quantity": 13
            }
            ]
Run Code Online (Sandbox Code Playgroud)

我想使用 variantId 作为过滤器。模型架构是:

let variantSchema = new mongoose.Schema({
    variantName: String,
    stocks: {
        type: Number,
        min: 0
    },
    regularPrice: {
        type: Number,
        required: true
    },
    salePrice: {
        type: Number,
        required: true
    }
})
Run Code Online (Sandbox Code Playgroud)

我想使用 variantId 过滤模型,然后减少库存。

mongoose mongodb node.js mongoose-schema

0
推荐指数
1
解决办法
2272
查看次数

Mongoose Schema 如何映射到 MongoDB 中的集合?

对于这个非常基本的问题表示歉意,但我有点困惑。我在 Express + Node 服务器中使用 Mongoose 发布到 Mongo,我刚刚意识到这两个模型/模式与它们发布到的 MongoDB 中的集合名称不完全相同。一切正常,API 端点发布到正确的集合,但我不知道如何或为什么。Mongoose 模型/模式和 MongoDB 集合之间有什么联系?

显然,我的 MONGODB_URI 环境变量指向我的数据库,但没有其他对集合的引用,特别是 API 端点应发布到哪个集合,除了模型,它与集合的名称不同。

例如,下面我的Post模型确实将数据(通过 api)发送到posts集合,但我无法弄清楚它如何知道这是正确的集合,这让我很烦恼。

const PostSchema = new Schema({
...
});

const Post = mongoose.model('Post', PostSchema);
module.exports = Post;
Run Code Online (Sandbox Code Playgroud)

作为测试,我将上面的变量完全重命名为完全不相关的东西

const TrevorSchema = new Schema({
...
});

const Trevor = mongoose.model('Trevor', TrevorSchema);
module.exports = Trevor;
Run Code Online (Sandbox Code Playgroud)

并且创建了一个带有复数模型名称“Trevors”的新集合,那么 Mongoose 是否会查找要映射到的模型复数名称?干杯,马特

mongoose mongodb mongoose-schema

0
推荐指数
1
解决办法
1344
查看次数