你好SO用户,
我遇到了一些高级的Mongoose查询,我根本无法从文档中找到答案。
首先,我想按一些数学排序。 基本上我希望能够按两个对象的价格差异进行排序。 我有“价格”和“oldprice”,其中包含基本数字值。 然后我想减去它们并按最高折扣排序。 所以在SQL中我会像
ORDER BY (oldprice - price)
我遇到的另一个问题是通过字符串数组过滤字符串数组。
所以基本上我有一个“裤子”模型,有一个[size]对象(字符串数组),它包含多个大小。 现在我希望能够通过多个用户选择的尺寸搜索数据库,并找到包含 ONE 所选尺寸的所有裤子。
我尝试过:
Pants.find({
name: new RegExp(search, 'ig'),
sizes: {
$in: [selectedSizes]
}
}).skip(skip).limit(limit).sort(sort).execFind(function(err, pants) {
return res.send(pants);
});
如果一个值在“selectedSizes”中,但是有多个值失败,那么它可以正常工作。
希望有人有一些想法; - )
裤子型号:
var PantsSchema;
PantsSchema = new mongoose.Schema({
supplier: {
type: String
},
manufacturer: {
type: String
},
web: {
type: String
},
name: {
type: String
},
link: {
type: String,
required: true,
unique: true
},
image: {
type: String
},
sizes: {
type: [String]
},
price: {
type: Number
},
oldprice: {
type: Number
},
added: {
type: Date,
"default": Date.now
},
updated: {
type: Date
}
});
答案 0 :(得分:1)
对于有问题的订单,您需要在Mongo
中创建一个存储oldPrice - price
值的字段,因为您只能按字段排序(并且您要对此进行索引)字段)。
然后,您只需在sort
电话中添加mongoose
表达式:
.sort('priceDifference', 1); // 1 or -1 depending on ascending or descending
对于第二个问题,您需要创建$or
个表达式,每个表达式对应您要查找的每个大小。我认为它看起来像这样:
.find( { $or : [ { sizes : { $in: ['m'] } }, { sizes : {$in: ['l'] } } ] } )