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’ ] } …]