gpt4 book ai didi

node.js - Mongoose 使用多个参数搜索 FindOne

转载 作者:IT老高 更新时间:2023-10-28 13:33:22 28 4
gpt4 key购买 nike

我第一次尝试使用 Angular + express + mongodb 构建一些东西,所以我可能会完全错误地处理这个问题。 Express 被用来提供 json。然后 Angular 会处理所有 View 等。

我正在使用 Mongoose 与 Mongo 交互。

我有以下数据库架构:

var categorySchema = new mongoose.Schema({
title: String, // this is the Category title
retailers : [
{
title: String, // this is the retailer title
data: { // this is the retailers Data
strapLine: String,
img: String , // this is the retailer's image
intro: String,
website: String,
address: String,
tel: String,
email: String
}
}
]
});

var Category = mongoose.model('Category', categorySchema);

在 Express 中,我有几条获取数据的途径:

 app.get('/data/categories', function(req, res) {
// Find all Categories.
Category.find(function(err, data) {
if (err) return console.error(err);
res.json(data)
});
});


// return a list of retailers belonging to the category
app.get('/data/retailer_list/:category', function(req, res) {
//pass in the category param (the unique ID), and use that to do our retailer lookup
Category.findOne({ _id: req.params.category }, function(err, data) {
if (err) return console.error(err);
res.json(data)
});
});

上述方法有效 - 我只是在尝试与单一零售商联系时遇到了大问题。我正在传递类别和零售商ID...我已经尝试了各种各样的事情-从对类别进行查找,然后在其中的内容上查找一个...但我就是无法让它工作。我可能会搞错这一切......

我在这里找到了这个帖子:findOne Subdocument in Mongoose并实现了解决方案 - 但是,它返回了我所有的零售商 - 而不仅仅是我想要的。

// Returns a single retailer
app.get('/data/retailer_detail/:category/:id', function(req, res) {
//pass in the category param (the unique ID), and use that to do our retailer lookup
Category.findOne({_id: req.params.category , 'retailers.$': 1}, function(err, data) {
console.log(data);
if (err) return console.error(err);
res.json(data)
});
});

谢谢,抢

最佳答案

现在我看到了您的完整过滤器/查询,您应该可以使用 array positional operator在这种情况下,作为投影的一部分,而不是进行客户端过滤:

app.get('/data/retailer_detail/:category/:id', function(req, res) {
//pass in the category param (the unique ID), and use that to do our retailer lookup
Category.findOne({
/* query */
_id: req.params.category ,
'retailers._id' : req.params.id
},
{ /* projection */
"retailers.$" : 1
},
function(err, data) {
var retailer = _.where(data.retailers , { id : req.params.id });
if (err) return console.error(err);
res.json(retailer)
});
});

为了使 { "retailers.$": 1 } 正常工作,查询必须包含来自数组元素的字段。 $ 运算符仅返回第一个匹配项。

关于node.js - Mongoose 使用多个参数搜索 FindOne,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com