7

我需要检索在数组中至少包含一个值的文档。我的文档结构是:

{ "_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})

我怎样才能做到这一点?

提前致谢。

4

1 回答 1

13

您可以检查数组中的值,就像比较某些字段的值一样。所以,你需要这样做,而不使用 $elemMatch: -

  1. 如果要检查数组是否包含单个值 5:-

    db.user.find({codes: 5}, {codes:1})
    

    这将返回所有文档,其中codes数组包含5.

  2. 如果要检查数组是否包含给定值集中的值:-

    db.user.find({codes: {$in: [2, 8]}}, {codes:1})
    

    这将返回包含 2 或 8 的数组的文档

  3. 如果要检查数组是否包含列表中的所有值:-

    db.user.find({codes: {$all: [2, 5]}}, {codes:1})
    

    这将返回包含 2 和 5 的数组的所有文档。

于 2013-01-16T20:01:10.270 回答