资讯专栏INFORMATION COLUMN

mongodb数组字段prefix匹配返回

魏明 / 930人阅读

摘要:结构对表的所有数据做过滤,返回中以开头的元素表原数据返回数据示例数据库随机构建表返回只保留了符合过滤规则的第一个元素,顺序不能换返回将一个文档拆分成多个文档返回数组元素包含字符串返回

DOC: https://docs.mongodb.com/manu...

collection(test)结构
{
    _id: Objectd("123456789"),
    category: [
        "apple_1",
        "apple_2",
        "banana_1",
        "banana_2"
    ]
}
Question:

对test表的所有数据做category过滤,返回category中以apple开头的元素

表原数据:

[    
    {
        _id: Objectd("id1"),
        category: [
            "apple_1",
            "apple_2",
            "banana_1",
            "banana_2"
        ]
    },
    {
        _id: Objectd("id2"),
        category: [
            "apple_3",
            "apple_4",
            "banana_1",
            "banana_2"
        ]
    }
    ...
]

返回数据示例:

[    
    {
        _id: Objectd("id1"),
        category: [
            "apple_1",
            "apple_2"
        ]
    },
    {
        _id: Objectd("id2"),
        category: [
            "apple_3",
            "apple_4"
        ]
    }
    ...
]



数据库try:随机构建test表

function getRandomArrayElements(arr, count) {
    var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
    while (i-- > min) {
        index = Math.floor((i + 1) * Math.random());
        temp = shuffled[index];
        shuffled[index] = shuffled[i];
        shuffled[i] = temp;
    }
    return shuffled.slice(min);
}
var temp = ["apple_1","apple_2","banana_3","banana_4","pear_5","pear_6","pear_7"];
for(var i =0; i < 10; i ++){
    db.getCollection("test").insert({
            category:getRandomArrayElements(temp, Math.random()*7)
    })
}

Try 1:
db.test.find({},{"category":{
    "$elemMatch":{
        $regex: "apple"
    }
}})

返回:

[    
    {
        _id: Objectd("id1"),
        category: [
            "apple_1",
        ]
    },
    {
        _id: Objectd("id2"),
        category: [
            "apple_3",
        ]
    }
    ...
]
category只保留了符合过滤规则的第一个元素
Try 2:
db.test.aggregate(
    {
        $unwind: "$category"
    },
    {
        $match: {
            category: {
             $regex: "apple_"
            }
        }
    },
    //unwind,match顺序不能换
)

返回:

[    
    {
        _id: Objectd("id1"),
        category: "apple_1"
    },
    {
        _id: Objectd("id1"),
        category: "apple_2"
    },
    {
        _id: Objectd("id2"),
        category: "apple_3"
    },
    {
        _id: Objectd("id2"),
        category: "apple_4"
    }
    ...
]
将一个文档拆分成多个文档返回
Try 3(Solution):
db.test.aggregate({
    $project: {
        "category":{
            $filter: {
                input: "$category",
                as: "cate",
                cond: {
                    // category数组元素cate包含字符串"apple_"
                    $eq: [ {
                        $indexOfCP: ["$$cate", "apple_"]
                    }, 0] 
                }
            }
        }
    }
})

返回:

[    
    {
        _id: Objectd("id1"),
        category: [
            "apple_1",
            "apple_2"
        ]
    },
    {
        _id: Objectd("id2"),
        category: [
            "apple_3",
            "apple_4"
        ]
    }
    ...
]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19472.html

相关文章

  • MongoDB指南---11、使用复合索引、$操作符如何使用索引、索引对象和数组、索引基数

    摘要:操作符如何使用索引有一些查询完全无法使用索引,也有一些查询能够比其他查询更高效地使用索引。有时能够使用索引,但是通常它并不知道要如何使用索引。索引对象和数组允许深入文档内部,对嵌套字段和数组建立索引。 上一篇文章:MongoDB指南---10、索引、复合索引 简介下一篇文章:MongoDB指南---12、使用explain()和hint()、何时不应该使用索引 1、使用复合索引 在多...

    saucxs 评论0 收藏0
  • MongoDB指南---11、使用复合索引、$操作符如何使用索引、索引对象和数组、索引基数

    摘要:操作符如何使用索引有一些查询完全无法使用索引,也有一些查询能够比其他查询更高效地使用索引。有时能够使用索引,但是通常它并不知道要如何使用索引。索引对象和数组允许深入文档内部,对嵌套字段和数组建立索引。 上一篇文章:MongoDB指南---10、索引、复合索引 简介下一篇文章:MongoDB指南---12、使用explain()和hint()、何时不应该使用索引 1、使用复合索引 在多...

    tomlingtm 评论0 收藏0
  • MongoDB指南---8、特定类型的查询

    摘要:但有时我们希望返回与查询条件相匹配的任意一个数组元素。首先,可以使用要求同时使用查询条件中的两个语句与一个数组元素进行比较。 上一篇文章:MongoDB指南---7、find简介与查询条件下一篇文章:MongoDB指南---9、游标与数据库命令 如第2章所述,MongoDB的文档可以使用多种类型的数据。其中有一些在查询时会有特别的表现。 4.3.1 null null类型的行为有点奇...

    娣辩孩 评论0 收藏0
  • MongoDB指南---8、特定类型的查询

    摘要:但有时我们希望返回与查询条件相匹配的任意一个数组元素。首先,可以使用要求同时使用查询条件中的两个语句与一个数组元素进行比较。 上一篇文章:MongoDB指南---7、find简介与查询条件下一篇文章:MongoDB指南---9、游标与数据库命令 如第2章所述,MongoDB的文档可以使用多种类型的数据。其中有一些在查询时会有特别的表现。 4.3.1 null null类型的行为有点奇...

    baiy 评论0 收藏0
  • 在node中的mongodb及mongoose常见用法

    摘要:是在环境下对进行便捷操作的对象模型工具安装一开始需要安装环境以及数据库,然后创建数据文件夹并且启动安装启动。出错返回符合条件的文档数。修改后的标题同上取反,删除一个字段执行后字段不存在增减修改器,只对数字有效。 Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具 安装 一开始需要安装node.js环境以及mongodb数据库,然后创建mongdb数据文件...

    liuhh 评论0 收藏0

发表评论

0条评论

魏明

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<