如何猫鼬列表() - 按子文档字段值过滤值

Posted

技术标签:

【中文标题】如何猫鼬列表() - 按子文档字段值过滤值【英文标题】:How to mongoose list() - filtering values by subdocument field value 【发布时间】:2016-11-23 13:32:56 【问题描述】:

所以我正在实现一个分页表,其中列出了一些具有子文档的记录,我需要添加过滤功能,以便我可以使用子文档字段值过滤 list() 结果。

let HardwareSchema = new mongoose.Schema(
    name:  type: String, required: true , // the exact name of the hardware.
    slug:  type: String, unique: true , // the hardware's slug.
    category:  type: String, ref: 'HardwareCategory', required: true ,


let HardwareCategorySchema = new mongoose.Schema(
    name:  type: String, unique: true, required: true , // the name of the category.
    slug:  type: String, unique: true , // the slug of the category.
    description:  type: String, unique: true, required: true , // the name of the category.
    createdBy:  type: String, ref: 'User', required: true  // the original submitter of the document.
);

所以基本上我想使用类别选择类别来过滤我们的硬件。

这是我的实际代码;

const options = 
    perPage: 10,
    page: (req.query.page > 0 ? req.query.page : 1) - 1,
    sortBy: 'rank': -1 ,
    criteria: 
        status: 'approved',
        category: 
             $elemMatch:  'slug': category 
        
    
;

Hardware.list(options)
.then(results => );

我收到了错误;不能将 $elemMatch 与字符串一起使用。

所以基本上我需要;

能够根据子文档字段值过滤结果。 能够对结果进行分页 能够对结果进行排序。

我该如何管理?

【问题讨论】:

【参考方案1】:

试试这个选项。

     const options = 
        perPage: 10,
        page: (req.query.page > 0 ? req.query.page : 1) - 1,
        sortBy: 'rank': -1 ,
        criteria: 
          status: 'approved',
          'category.slug' : category 
        
     ;

或者你可以使用 find() 之类的

      Hardware.find(
         'category.slug' : category 

     , function(err, data)
     )

【讨论】:

以上是关于如何猫鼬列表() - 按子文档字段值过滤值的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬聚合中使用字段值? (节点)

如何使用 Mongoose 查询过滤到数组类型字段中具有指定值的文档?

如何使用spring MongoTemplate查询子文档,并按子文档的某个字段排序?

Firebase - iOS SDK - 按子值过滤

如何在猫鼬模型中自动增加字段值[重复]

如何从猫鼬的另一个集合中计算文档?