MongoDB数组谓词

时间:2011-04-06 07:38:59

标签: mongodb

我很奇怪是否有任何方法可以进行复杂的选择。 考虑以下文档集:

{
  image = "cab"
  tags = [
            [ "NNP", 0 ],
            [ "NN", 1 ]
         ]
},
{
  image = "castle"
  tags = [
            [ "NNP", 2 ],
            [ "NN", 1 ],
            [ "VB", 0 ]
         ]
}, 
(etc)

我如何表达一个查询,检查tags是否包含任何元素,例如["NN", ?],其中我根本不关心内部数组的整数部分?请注意,内部数组是无序的,并且任意分配整数值。

请注意,我是mongodb的新手,我可能忽略了在文档中执行此操作的方法。但是,我无法成功使用$elemMatch: - (

1 个答案:

答案 0 :(得分:3)

我建议另一个架构:

{
  image = "cab"
  tags = [
            { name: "NNP", order: 0 },
            { name: "NN", order: 1 }
         ]
}

我建议另一个架构有三个原因:

  1. 首先是因为两级嵌套通常难以查询/更新
  2. 标签内的数组包含不同类型的项目(int,string)。
  3. 标签数组中的数组对我来说就像是带有两个字段的“标记对象”
  4. 使用上述模式,您可以轻松查询具有某些名称和顺序的标记:

    db.images.find({ "tags.name" : "NN", "tags.order" : 1 })
    

    <强>更新

    Dot notation文档

    希望这有帮助!