【问题标题】:mongodb query subset of an arraymongodb查询数组的子集
【发布时间】:2012-08-26 18:01:19
【问题描述】:

我有一个字段_keywords,它是一个字符串数组。我想获取其中_keywords 是查询数组超集的文档。

例如:

db.article.insert({'_keywords': ['foo', 'foo1', 'foo2']})

我想在查询 ['foo', 'foo1', 'foo2'] 的子集时检索此记录,例如:['foo'], ['foo1', 'foo2']

编辑: 类似:

db.article.find({'_keywords': {$contains: array}})

【问题讨论】:

    标签: arrays mongodb subset keyword-search


    【解决方案1】:

    在 MongoDb 中,对于数组字段:

    "$in:[...]" means "intersection" or "any element in",
    "$all:[...]" means "subset" or "contain",
    "$elemMatch:{...}" means "any element match"
    "$not:{$elemMatch:{$nin:[...]}}" means "superset" or "in"
    

    【讨论】:

    • 集合论的大分解!帮助我理解它,因为我需要该字段是一个子集,这意味着查询中传递的值是超集(最后的双重否定查询)。
    【解决方案2】:

    简答:$all 操作员。
    要查询超集为 ['foo1', 'foo2'] 的数组的文档,请使用:
    db.article.find( { '_keywords': { $all: ['foo1', 'foo2'] } } );

    【讨论】:

      【解决方案3】:

      使用$all 运算符:

      db.article.find( { _keywords: { $all: [ 'foo1', 'foo2' ] } } );
      

      来源:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all

      【讨论】:

      • 如何检索_keywords 包含给定查询数组中的任何项目的文档。类似:db.article.find({_keywords: {$any: ['foo1', 'foo2']}}),它返回任何带有 _keywords 的文档包含 'foo1' 或 'foo2'
      • 我记得,在这种情况下你可以使用$in,例如:db.article.find({_keywords: {$in: ['foo1', 'foo2']}})。检查这是否正确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多