1

您好 SO 用户,

我遇到了一些高级 Mongoose 查询,我根本无法从文档中弄清楚。

首先,我想按一些数学排序。基本上我希望能够按两个对象的价格差异进行排序。我有“价格”和“旧价格”,其中包含基本数值。然后我想减去它们并按最高折扣排序。所以在 SQL 中我会是这样的

ORDER BY (oldprice - price)

我遇到的另一个问题是通过字符串数组过滤字符串数组。

所以基本上我有一个“裤子”模型,有一个 [size] 对象(字符串数组),它包含多种尺寸。现在我希望能够通过多个用户选择的尺码来搜索数据库,并找到所有包含一个所选尺码的裤子。

我试过做:

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
  }
});
4

1 回答 1

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'] } } ] } )
于 2012-10-03T09:04:10.690 回答