MongoDB数组谓词

MongoDB数组谓词,mongodb,Mongodb,我想知道是否有办法做出复杂的选择。 考虑到以下文件收集: { image = "cab" tags = [ [ "NNP", 0 ], [ "NN", 1 ] ] }, { image = "castle" tags = [ [ "NNP", 2 ], [ "NN", 1 ], [ "VB", 0 ] ] }, (etc)

我想知道是否有办法做出复杂的选择。 考虑到以下文件收集:

{
  image = "cab"
  tags = [
            [ "NNP", 0 ],
            [ "NN", 1 ]
         ]
},
{
  image = "castle"
  tags = [
            [ "NNP", 2 ],
            [ "NN", 1 ],
            [ "VB", 0 ]
         ]
}, 
(etc)
我如何表达一个查询,检查
标记
是否包含任何元素,例如,
[“NN”,?]
,其中我根本不关心内部数组的整数部分?请注意,内部数组是无序的,整数值是任意分配的


请注意,我是mongodb的新手,我可能在文档中忽略了这样做的方法。但是,我无法成功地使用
$elemMatch
:-(

我建议使用另一种模式:

{
  image = "cab"
  tags = [
            { name: "NNP", order: 0 },
            { name: "NN", order: 1 }
         ]
}
我建议采用另一种模式的原因有三:

{
  image = "cab"
  tags = [
            { name: "NNP", order: 0 },
            { name: "NN", order: 1 }
         ]
}
  • 首先,这是因为两级嵌套通常更难查询/更新
  • 标记数组中的数组包含不同类型的项(int、string)
  • 标记数组中的数组在我看来像是带有两个字段的“标记对象”
  • 使用上述模式,您可以轻松查询具有某些名称和顺序的标记:

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

    文件


    希望这有帮助!

    谢谢。我也这么怀疑。不过,您的查询没有立即起作用,因为
    标记仍然是一个对象数组,但发出了
    .find({“标记”:{$elemMatch:{“标记”:“NN”}}}}})
    对您的模式做得很好。@Manny:我的查询没有问题;)
    .find({“tags”:{$elemMatch:{“tag”:“NN”}}})
    给出与
    相同的结果。find({“tags.tag”:“NN”)
    。只需查看或询问是否需要。此外,我在回答中添加了指向“点表示法”文档的链接。