我需要检索在数组中包含至少一个值的文档。我的文件结构是:
{ "_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 }
我需要通过"代码进行查找"如果我搜索值" 5",我需要检索其数组中包含此值的所有文档。
我试过使用#elemMatch但没有成功......
db.user.find({codes: {"$elemMatch": {codes: [2,8]}}}, {"codes":1})
我该怎么做?
提前致谢。
答案 0 :(得分:8)
您可以像比较某些字段的值一样检查数组中的值。 所以,你需要这样做,而不使用$ elemMatch: -
如果要检查数组是否包含单个值5: -
db.user.find({codes: 5}, {codes:1})
这将返回所有文档,其中codes
数组包含5
。
如果要检查数组是否包含给定值集之外的值: -
db.user.find({codes: {$in: [2, 8]}}, {codes:1})
这将返回包含2或8
如果要检查数组是否包含列表中的所有值: -
db.user.find({codes: {$all: [2, 5]}}, {codes:1})
这将返回包含2和5的数组的所有文档。