Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中检查数组字段是否包含唯一值或其他数组?_Mongodb - Fatal编程技术网

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

如何在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

我现在正在使用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
  • 包含
    ['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'} ] });