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

我现在用的是蒙哥布。

我有一个 blogpost 集合,它有一个 tags字段,这是一个数组,例如。

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']

我该怎么做这些搜索

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

试试这个:

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

我的经验是,对于(2) ,下面的解决方案比“ $all”的解决方案要快得多:

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });

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