我想对集合的子集合中的项目进行排序。我可以列出它们,但不能按照我想要的方式列出。我希望它们按项目数组对象的'no'属性进行排序
我的收藏模式
const itemSchema = mongoose.Schema({
item: [{ name: String, no: Number }],
});
module.exports = mongoose.model("Item", itemSchema);
我的端点
getItems(req, res) {
try {
Item.find({ _id: req.item._id }, (err, founds) => {
if (err) {
res
.status(httpStatus.INTERNAL_SERVER_ERROR)
.json({ message: "error occured!", err });
}
res.send(founds[0].item);
});
} catch (error) {
res
.status(httpStatus.INTERNAL_SERVER_ERROR)
.json({ message: "display item error", error });
}
},
答案 0 :(得分:0)
您可以通过使用聚合来做到这一点。 首先我们是matching个文档,然后是unwinding,sorting,最后是grouping。
Item.aggregate([
{
$match: {
_id: mongoose.Types.ObjectId("5df7c5121debf22a388da1c7")
}
},
{
$unwind: "$item"
},
{
$sort: {
"item.no": -1 //1 (for ascending) or -1 (for descending)
}
},
{
$group: {
_id: "$_id",
item: {
$push: "$item"
}
}
}
])
.then(founds => {
if (founds.length > 0) {
res.send(founds[0]);
} else {
res.status(400).send("No doc found");
}
})
.catch(err => {
res
.status(httpStatus.INTERNAL_SERVER_ERROR)
.json({ message: "error occured!", err });
});