mongodb数组字段prefix匹配返回
生活随笔
收集整理的這篇文章主要介紹了
mongodb数组字段prefix匹配返回
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
DOC: https://docs.mongodb.com/manu...
collection(test)結(jié)構(gòu)
{_id: Objectd("123456789"),category: ['apple_1','apple_2','banana_1','banana_2'] }Question:
對(duì)test表的所有數(shù)據(jù)做category過(guò)濾,返回category中以apple開(kāi)頭的元素
表原數(shù)據(jù):
[ {_id: Objectd("id1"),category: ['apple_1','apple_2','banana_1','banana_2']},{_id: Objectd("id2"),category: ['apple_3','apple_4','banana_1','banana_2']}... ]返回?cái)?shù)據(jù)示例:
[ {_id: Objectd("id1"),category: ['apple_1','apple_2']},{_id: Objectd("id2"),category: ['apple_3','apple_4']}... ]數(shù)據(jù)庫(kù)try:隨機(jī)構(gòu)建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只保留了符合過(guò)濾規(guī)則的第一個(gè)元素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'}... ] 將一個(gè)文檔拆分成多個(gè)文檔返回Try 3(Solution):
db.test.aggregate({$project: {"category":{$filter: {input: "$category",as: "cate",cond: {// category數(shù)組元素cate包含字符串'apple_'$eq: [ {$indexOfCP: ["$$cate", "apple_"]}, 0] }}}} })返回:
[ {_id: Objectd("id1"),category: ['apple_1','apple_2']},{_id: Objectd("id2"),category: ['apple_3','apple_4']}... ]總結(jié)
以上是生活随笔為你收集整理的mongodb数组字段prefix匹配返回的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: react学习(71)--render使
- 下一篇: react(87)--批量删除进行置空操