猫鼬对嵌入式文档数组中的某些元素进行计数

亚历克斯

我正在使用猫鼬4.6.3

我有以下架构:

var mongoose = require('mongoose');
var User = require('./User');

var TicketSchema = new mongoose.Schema({
    user : { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
},
{
    timestamps: true
});

var DrawSchema = new mongoose.Schema({
  ...
  max_ticket_per_user : { type : Number, required: true },
  tickets: [TicketSchema]
});

module.exports = mongoose.model('Draw', DrawSchema);

如何计算某个抽奖券的票证(DrawSchema的票证字段)中某个User ObjectId(TicketSchema的user字段)的嵌入文档?我想计算一次抽奖的用户门票。

更改架构设计会更好吗?

谢谢

克列丹

您可以使用聚合框架,利用$filter$size运算符获取具有分别与用户ID及其大小匹配的元素的过滤数组,随后将为您提供计数。

对于单幅绘制,请考虑$match在_id查询的第一步添加管道运算符,以过滤集合中的文档。

考虑运行以下聚合管道以获得所需的结果:

Draw.aggregate([
    { "$match": { "_id": drawId } },
    {
        "$project": {
            "ticketsCount": {
                "$size": {
                    "$filter": {
                        "input": "$tickets",
                        "as": "item",
                        "cond": { "$eq": [ "$$item.user", userId ] }
                    }
                }
            }
        }
    }
]).exec(function(err, result) {
    console.log(result);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

猫鼬:如何更新子嵌入式文档数组?

复杂查询猫鼬-嵌入式文档数组

通过与猫鼬中的其他数组匹配从嵌入式数组中删除元素

猫鼬嵌入式方案不能从嵌入式数组中删除

猫鼬:使用$ pull删除嵌入式文档数组中的值(MongoDB 3.4版本)

猫鼬计数嵌入数组元素与聚合

在浏览器中以猫鼬显示嵌入式文档数据模型

如何对文档中的数组元素进行排序(猫鼬)

如何在操作应该是原子的猫鼬中更新数组中的嵌入式文档,应更新最新版本并返回更新的文档?

猫鼬填充嵌入式

如何在猫鼬中使用$ set动态更新嵌入式文档

Mongodb聚合与猫鼬过滤器嵌入式文档

如何通过猫鼬查询返回嵌入式文档的过滤结果

关闭从猫鼬的嵌入式文档自动创建索引路径?

将嵌入式文档数组转换为mongoDB中的元素数组

如何获得数组嵌入式数组猫鼬的大小?

如何从MONGO文档中的嵌入式数组中选取多个元素

MongoDB聚合:从嵌入式数组中删除某些元素(已编辑?)

在mongoDb中对嵌入式文档数组(3个级别)进行过滤查询

当更改嵌入式数组对象时,猫鼬实例.save()无法正常工作

猫鼬单个嵌入式子文档默认

对猫鼬/蒙哥语术语感到困惑。子文档/嵌入式文档也是集合吗?

如何在嵌入式数组mongodb中查询嵌入式文档

如何在嵌入式文档中查找某个元素

猫鼬在文档中删除数组元素

基于范围查询MongoDB中嵌入式文档的数组

查询Spring Data MongoDB中嵌入式文档的数组

在嵌入式数组中按$ in查找文档

数组中嵌入式文档的collection更新属性