【问题标题】:Search and filter data in Mongo DB using mongoose使用 mongoose 在 Mongodb 中搜索和过滤数据
【发布时间】:2017-09-30 07:10:17
【问题描述】:

var questionSchema = new Schema({
    category: { name:
        {
        type: String,
        lowercase: true,
        required: [true, 'Category is a required field']
    },
        question:[
            {
                q: {
                    type: String,
                    lowercase: true
                    
                },
                options: {
                    option1:{
                        type: String,
                        lowercase: true
                        
                    },
                    option2:{
                        type: String,
                        lowercase: true
                       ]
                    },
                    option3:{
                        type: String,
                        lowercase: true
                        
                    },
                    option4:{
                        type: String,
                        lowercase: true
                        
                    },
                },
                ans: {
                    type: String,
                    lowercase: true
                  
                },
                level:{
                    type: String,
                    lowercase: true
               
                }

            }

        ]
    },


},
    {
        strict: true,
        runSettersOnQuery: true,
        timestamps: {
            createdAt: 'created', updatedAt: 'updated'
        }
    });

这是我的问题架构。我正在尝试获取特定类别的所有问题。到现在我都试过这个---

function (req,res,next) {
    console.log(req.params.qcategory);
    Question.find({
        category:{
            name: req.params.qcategory,
        }
    },'', function (err,data) {
        if (err) {
            err.status = 406;
            return next(err);
        }
        console.log(data);
        return res.status(201).json({
            message: ' success.',data:data
        })
    })
};

在 req.params.qcategory 中,它包含类别的名称,例如“编程”。 但它返回给我一个空数组。 **附言。我的数据库中有编程类别的问题。那我在做什么错???

还有一种方法可以先检查问题属于哪个类别,然后将其添加到该特定类别内的问题数组中。我不想一次又一次地添加带有类别的问题,而是想检查该类别是否已存在于数据库中并将问题推送到该问题类别的数组中。例如,如果一个问题属于“编程”类别,并且在数据库中已经存在一个再次属于“编程”类别的问题,则将该问题推送到编程类别数组中。

如果我的问题不清楚,请发表评论,我会尽快回复。

【问题讨论】:

  • 第二个问题使用findOneAndUpdate()函数
  • 谢谢nidhin,但是如果一个类别不存在,那么这个方法就行不通了?
  • {upsert:true} 选项? stackoverflow.com/a/25116688/3359432 还要确保您查询的数据存在于数据库中。可能是因为架构数据不存在。
  • 好的,谢谢,我会试试 {upsert : true}
  • 您是否尝试过将dot notation 用作Question.find({ 'category.name': req.params.qcategory }, function (err, data) { ... });

标签: javascript node.js mongodb mongoose mongoose-schema


【解决方案1】:

试试这个,未测试

function (req,res,next) {
console.log(req.params.qcategory);
Question.find({
    "category.name": req.params.qcategory,}
 , function (err,data) {
    if (err) {
        err.status = 406;
        return next(err);
    }
    console.log(data);
    return res.status(201).json({
        message: ' success.',data:data
    })
})
};

更换 {category:{name:req.params.qcategory}}{"category.name":req.params.qcategory}

阅读更多关于 mongodb 的查询嵌入式文档https://docs.mongodb.com/.../method/db.collection.find/

【讨论】:

    【解决方案2】:

    试试这个。

    function (req,res,next) {
        console.log(req.params.qcategory);
        const name = req.params.qcategory;
        Question.find({name})
            .then((data)=>return res.status(201).json({message:"success",data:data})
            .catch(err=> {
                res.status(406)
                return next(err);
            })
    };
    

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2017-05-14
      • 2013-09-10
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多