头图

mongon常用命令3--标签数组匹配

1、mongon数组标签tag匹配案例1(同个数组,且内容相同):

数据库是这样的:
图片.png

我想要的是从我的tag标签返回搜索到的关键词:
(1)数组中单个匹配:(单个匹配,只要数组中含有这个关键字,那么都会返回)

db.ss_tests.find({tag:'小学'} )

结果:
图片.png
数据很杂乱,去一下不必要的字段:字段后加0,表示不显示。

db.ss_tests.find({tag:'小学'},{content:0,_id:0,id:0} )

结果这样就很简洁了:
图片.png
(2)多个条件匹配:

db.ss_tests.find( { tag:{$all: ['高中',"语文"]} },{content:0,id:0,_id:0} )

运行结果:
图片.png
加了关键字$all,它会返回文档中符合条件的数组,只要包含高中,语文就会返回;而且会忽视数组中原本该关键字的顺序,和数组是否存在其它元素。
但是你如果这样匹配你的数据库:

db.ss_tests.find( { tag: ['高中',"语文"] } )

结果将会空白,返回没有什么,它的意思是查询所有数组元素为高中,语文的,但是只能包含高中,语文这两个关键字,其它不行,由于我数据库的标签都是三个元素的,所以无法打印出结果:
图片.png

官方文档存在加all与不加all的说明,下面附上原说明:
不加all:
图片.png

翻译:下面的这个例子会查询所有文档中的tags数组,这些数组必须包含确切的两个元素“red”和“blank”,并且顺序也是特定的,就是即使存在有的文档含有red和blank,但是顺序改变,它也不会反馈给你。

加了all:
图片.png

翻译:相反,如果你希望找到的数组包含上面的这两个元素red和blank,然而忽略其它元素是否存在,并且也忽略它在数组中的顺序,那么你可以使用 $all 这个运算符

    • -

2.mongon数组标签tag匹配案例2(同个数组,但内容不相同):

数据库是这样的:
tag内容1:
图片.png

tag内容2:
图片.png

即我有一个tag数组标签,但是里面存放的内容不相同,但是我想查询的时候实现如下功能:
查询:‘五年级试卷的时候’顺便要查询【‘小学’,‘四年级’】所有内容

{  $or:[ {tag:{$all:['小学','四年级']}}, {tag:'五年级试卷'}] }

运行结果:
图片.png

案例3待更......


hmy666
266 声望11 粉丝

Ta像是以前学生时代班上常有的学生,成绩中上游,偶尔拔得头筹,但大部分时候安安静静地坐着,Ta有自己的兴趣爱好,但多数都不能使Ta出类拔萃,Ta不是天生光芒万丈的学霸学神,但所有人都不会遗忘Ta。