Javascript mongodb/mongoose-按两个字段排序
我有两个字段:Javascript mongodb/mongoose-按两个字段排序,javascript,arrays,node.js,mongodb,mongoose,Javascript,Arrays,Node.js,Mongodb,Mongoose,我有两个字段: 日期(ISODate) 值(它是一个数字——但也可以是未定义的) 我想以一种特定的方式对它们进行分类 首先-按值排序。如果存在(而不是未定义的),让它们先来。如果value未定义,则将这些对象推到末尾 其次-按日期排序。现在,我们将按照值对所有内容进行排序。但是现在我想按日期对它进行排序 预期结果: 当前解决方案: 然而,它在某些情况下失败了,不幸的是,我无法发现为什么它有时会以错误的方式进行排序。但它确实 先谢谢你 要实现这一点,您可以将聚合与$cond一起使用 在Mon
- 日期(
)ISODate
- 值(它是一个
——但也可以是数字
)未定义的
我想以一种特定的方式对它们进行分类 首先-按
值排序
。如果存在(而不是未定义的
),让它们先来。如果value
未定义,则将这些对象推到末尾
其次-按日期排序。现在,我们将按照值对所有内容进行排序。但是现在我想按日期对它进行排序
预期结果:
当前解决方案:
然而,它在某些情况下失败了,不幸的是,我无法发现为什么它有时会以错误的方式进行排序。但它确实
先谢谢你
要实现这一点,您可以将聚合与$cond
一起使用
在MongoGUI中测试
猫鼬中的聚集物:
Model.aggregate([
{
$project:
{
"id": 1,
"value": 1,
"date": 1,
sortValue: {
$cond: {
if: { $eq: ['$value', undefined] },
then: 0,
else: 1,
},
}
}
},
{
$sort:
{
"sortValue": -1,
"value": 1,
"date": -1
}
}
], function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(result);
});
说“它在某些方面失败了”是含糊不清的,毫无帮助的。预期的行为是什么?你看到了什么?请描述并提供一个简单的例子。如何将其用于猫鼬?
.sort({
value: -1,
date: -1
});
db.getCollection('collectionName').aggregate([
{
$project :
{
"id" : 1,
"value" : 1,
"date": 1,
sortValue: {
$cond: {
if: { $eq: ['$value',undefined ]},
then: 0,
else: 1,
},
}
}
},
{
$sort :
{
"sortValue" :-1,
"value" : 1,
"date" : -1
}
}])
Model.aggregate([
{
$project:
{
"id": 1,
"value": 1,
"date": 1,
sortValue: {
$cond: {
if: { $eq: ['$value', undefined] },
then: 0,
else: 1,
},
}
}
},
{
$sort:
{
"sortValue": -1,
"value": 1,
"date": -1
}
}
], function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(result);
});