如何检查数组字段是否包含MongoDB中的唯一值或另一个数组?

gui*_* 桂林 141 mongodb

我现在正在使用mongodb.

我有blogpost集合,blogpost有一个标签,这是一个数组,例如

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']
Run Code Online (Sandbox Code Playgroud)

我该怎么做这些搜索

  1. 包含'tag1'
  2. 包含['tag1','tag2'],
  3. 包含任何['tag3','tag4']

Jef*_*ear 218

试试这个:

db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3
Run Code Online (Sandbox Code Playgroud)

  • 这在帮助中有详细记载:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all (6认同)
  • 对于$ all它是指所有元素和表达顺序还是只是无序? (2认同)
  • @ScottHernandez我没有看到他们提到你用作搜索的字段可以是一个数组,以及如何处理."field:{$ in:array}".在阵列数组中搜索数组时会发生什么?未标明. (2认同)

hei*_*nob 5

我的经验是,对于(2)以下解决方案比使用"$ all"的解决方案要快得多:

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });
Run Code Online (Sandbox Code Playgroud)

但说实话,我不是为什么.如果有人知道,我会感兴趣.