猫鼬查询以对主文档进行排序子文档按特定字段

编程入门 行业动态 更新时间:2024-10-19 11:54:42
本文介绍了猫鼬查询以对主文档进行排序子文档按特定字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有3个文档.

const designTypeSchema = new mongoose.Schema ({ name : { type : String, trim: true, required : true, }, image : { type : String, trim: true, required : true, }, status: { type : Boolean, default: true } } ); const tagTypeSchema = new mongoose.Schema ({ name : { type : String, required : true, }, design_type : { type: mongoose.Schema.Types.ObjectId, ref: 'DesignType', } , order : { //need to apply sorting for this field type : Number, trim: true, }, status: { type : Boolean, default: true } } ); const TagSchema = new mongoose.Schema ({ name : { type : String, required : true, }, tag_type : { type: mongoose.Schema.Types.ObjectId, ref: 'TagType', image : { type : String, trim: true, }, order : { //need to apply sorting for this field type : Number, }, status: { type : Boolean, default: true } }, );

我需要对TagType.order& 2个字段进行排序标记顺序.

I need to apply sort on 2 fields, TagType.order & Tag.order.

TagType将被视为主要文档,因此首先TagType应按顺序字段列出,然后Tag将成为子文档,并且应按Tag.order字段列出.

TagType will be considered as main document , so first TagType should list by order field and then Tag will be subdocument and it should list by Tag.order field.

我在下面的查询中尝试过:

I tried below query :

TagType.aggregate( [ { $lookup: { from: "tags", localField: "_id", foreignField: "tag_type", as: "tags", }, }, { $lookup: { from: "designtypes", localField: "design_type", foreignField: "_id", as: "designtype", } }, { $project: { _id: 1, name: 1, tag_type: 1, order: 1, "designtype.name":1, "tags._id":1, "tags.name":1, "tags.image":1, "tags.order":1, totalTags: {$size: "$tags"}, } }, { $sort : { "order": -1, 'tags.order' : -1 } }, ] ).exec(function(err, results) { if (err) { throw err; } res.status(200).json({ message: 'success', total: results.length, response: { data: results } }) });

使用上面的查询,我得到的是排序结果,但是它仅对主文档而不对子文档(标签)应用排序.我在查询中缺少想要得到的结果.

Using above query i am getting sorted result But its applying sorting on main document only, not on subdocuments(Tags). What i am missing in query to get desire result.

我的问题与此> 6岁的问题有关:.但是那个问题并没有答案.所以我发布了一个新的.

My question is related to this 6 years old question :. But that question have not desire answer. So i posted new one.

任何帮助将不胜感激.谢谢

Any help will be appreciated. Thanks

推荐答案

当前无法直接在数组对象内部进行排序,

Currently sort is not possible directly inside array objects,

您可以选择两个选项,

  • 如果您要从查找中获取数据,请使用使用管道查找,它将允许在匹配文档中使用 $ sort 管道
  • $ unwind the array =>$ sort ==>再次将其分组到数组中,请参阅答案"
  • if you are getting data from lookup then use lookup with pipeline it will allow to use $sort pipeline within match documents
  • $unwind the array => $sort it => again $group it into array, Refer SO Answer

这里使用的是 $ lookup ,而不是简单的查找,而是可以使用"$ lookup withpipeline".

here you are using $lookup, instead of simple lookup you can use "$lookup with pipeline".

{ $lookup: { from: "tags", as: "tags", let: { id: "$_id" }, pipeline: [ { $match: { $expr: { $eq: ["$$id", "$tag_type"] } } }, { $sort: { order: -1 } } ] } },

游乐场

第二种可能的解决方案:游乐场

Second possible solution: Playground

更多推荐

猫鼬查询以对主文档进行排序子文档按特定字段

本文发布于:2023-11-22 13:31:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1617606.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:主文   字段   以对   文档

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!