mongodb数组操作符

数组操作符
/*
$all      : 匹配数组中包含所有指定查询值的文档
{<field>: {$all: [<value1>, <value2>, ...]}}
$elemMatch: 匹配数组中至少有一个能完全匹配所有的查询条件的文档
{<field>: {$elemMatch: {<query1>, <query2>, ...}}}

2.示例
查询tags中同时拥有html和js的文档
db.person.insert([
{name: 'zs', tags:['html', 'js', 'vue']},
{name: 'ls', tags:['html', 'react', 'vue']},
{name: 'ww', tags:['html', 'node', 'js']},
])
db.person.find({tags:{$all:['html', 'js']}})

查询所有名称叫做zs,年龄是18岁的文档
db.school.insert([
{class: 'one',
studnets: [
    {name:'zs', age: 18},
    {name:'ls', age: 19},
    {name:'ww', age: 20},
]},
{class: 'two',
studnets: [
    {name:'zs', age: 20},
    {name:'ls', age: 19},
    {name:'ww', age: 18},
]},
])

db.school.find({'studnets.name':'ww', 'studnets.age':18})
db.school.find({studnets:{$elemMatch:{name:'ww',age:18}}})*/

db.person.remove();

db.person.insert([
{name: 'zs', tags:['html', 'js', 'vue']},
{name: 'ls', tags:['html', 'react', 'vue']},
{name: 'ww', tags:['html', 'node', 'js']},
])

db.person.find()
//需求:要求查询出所有tags数组中同时包含html和js的文档:

db.person.find({tags:{$all:['html','js']}})

//$elemMatch: 匹配数组中至少有一个能完全匹配所有的查询条件的文档
db.school.insert([
{class: 'one',
studnets: [
    {name:'zs', age: 18},
    {name:'ls', age: 19},
    {name:'ww', age: 20},
]},
{class: 'two',
studnets: [
    {name:'zs', age: 20},
    {name:'ls', age: 19},
    {name:'ww', age: 18},
]},
])

db.school.find()

//需求:要求查询出有名称叫做ww,并且年龄是18岁这个学生的班级:
/*
下面的查询条件会先去找name:'ww',再去找age:18,会找这两个条件的交集而不是并集,所以要使用到$elemMatch
*/
db.school.find({'studnets.name':'ww','studnets.age':18})
//下面是可以的
db.school.find({studnets:{$elemMatch:{name:'ww',age:18}}})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名之辈无名之辈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值