如何在MongoDB中检查数组字段是否包含唯一值或其他数组?
我现在正在使用mongodb 我有一个blogpost集合,它有一个如何在MongoDB中检查数组字段是否包含唯一值或其他数组?,mongodb,Mongodb,我现在正在使用mongodb 我有一个blogpost集合,它有一个标记字段,它是一个数组,例如 blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5'] blogpost2.tags = ['tag2', 'tag3'] blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5'] blogpost4.tags = ['tag1', 'tag4', 'tag5'] 我如何进行这些搜索 包含tag1
标记字段,它是一个数组,例如
blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']
我如何进行这些搜索
包含tag1
包含['tag1','tag2']
包含任何['tag3'、'tag4']
试试这个:
db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3
我的经验是,对于(2),以下解决方案比使用“$all”的解决方案快得多:
但老实说,我不知道为什么。如果有人知道的话,我很感兴趣。这在帮助中有很好的记录:对于$all,它是指所有元素,并且以表达的顺序排列,还是只是无序排列?@ScottHernandez我看不到他们提到您在搜索时使用的字段可以是数组,以及如何处理它。“字段:{$in:array}”。在数组数组中搜索数组时会发生什么情况?未指定。是否可以对数组执行任何索引以停止重复?如果是,请指导如何操作。@redben其无序性与文档中所写的一样:。只需阅读示例部分,您就会看到。顺便说一句,刚刚在索引关键字列表中测试了它。与$and和$ALL的结果完全相同,这可能与较新版本同时发生了变化。这是间接的。对于“$and”,mongodb执行逻辑“and”操作。因此,如果第一个表达式为假,则不考虑第二个表达式。这意味着更少的处理。但这也应该发生在“$all”上,不是吗$所有可能都是对索引的两次查找,$,也可能是对结果进行顺序扫描的一次查找。
db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });