我需要检索在数组中包含至少一个值的文档.我的文件结构是:
{ "_id": 3,
"username": "111111",
"name": "XPTO 1",
"codes": [ 2, 4, 5 ],
"available": true }
{ "_id": 4,
"username": "22222",
"name": "XPTO 2",
"codes": [ 3, 5 ],
"available": true }
Run Code Online (Sandbox Code Playgroud)
我需要通过"代码"进行查找,如果我搜索值"5",我需要检索其数组中包含此值的所有文档.
我试过用#elemMatch但没有成功......
db.user.find({codes: {"$elemMatch": {codes: [2,8]}}}, {"codes":1})
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
提前致谢.
Roh*_*ain 10
您可以像比较某些字段的值一样检查数组中的值.所以,你需要这样做,而不使用$ elemMatch: -
如果要检查数组是否包含单个值5: -
db.user.find({codes: 5}, {codes:1})
Run Code Online (Sandbox Code Playgroud)
这将返回codes数组包含的所有文档5.
如果要检查数组是否包含给定值集之外的值: -
db.user.find({codes: {$in: [2, 8]}}, {codes:1})
Run Code Online (Sandbox Code Playgroud)
这将返回包含2或8的数组的文档
如果要检查数组是否包含列表中的所有值: -
db.user.find({codes: {$all: [2, 5]}}, {codes:1})
Run Code Online (Sandbox Code Playgroud)
这将返回包含2和5的数组的所有文档.