使用 mongoose 在 Mongo 数据库中搜索和过滤数据
Search and filter data in Mongo DB using mongoose
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 中,它包含类别的名称,例如 'programming'。
但它返回了一个空数组。 **PS。我的数据库中有编程类别的问题。那我做错了什么???
还有一种方法可以先检查问题属于什么类别,然后将其添加到该特定类别内的问题数组中。我不想一次又一次地添加带有类别的问题,而是想检查该类别是否已存在于数据库中并将问题推送到该问题类别的数组中。例如,如果一个问题属于 'programming' 类别,并且在数据库中已经有一个问题再次属于 'programming' 类别,那么将问题推入编程类别数组中。
如果我的问题不清楚,请评论我会尽快回复。
试试这个,未测试
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}} 与 {"category.name":req.params.qcategory}.
详细了解 mongodb 的查询嵌入文档 https://docs.mongodb.com/.../method/db.collection.find/
试试这个。
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);
})
};
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 中,它包含类别的名称,例如 'programming'。 但它返回了一个空数组。 **PS。我的数据库中有编程类别的问题。那我做错了什么???
还有一种方法可以先检查问题属于什么类别,然后将其添加到该特定类别内的问题数组中。我不想一次又一次地添加带有类别的问题,而是想检查该类别是否已存在于数据库中并将问题推送到该问题类别的数组中。例如,如果一个问题属于 'programming' 类别,并且在数据库中已经有一个问题再次属于 'programming' 类别,那么将问题推入编程类别数组中。
如果我的问题不清楚,请评论我会尽快回复。
试试这个,未测试
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}} 与 {"category.name":req.params.qcategory}.
详细了解 mongodb 的查询嵌入文档 https://docs.mongodb.com/.../method/db.collection.find/
试试这个。
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);
})
};