mongodb在数组中找到元素或更少但没有其他元素

时间:2015-03-24 15:49:14

标签: mongodb mongodb-query

我有这个系列:

{
  "title": "First Item",
  "attributes": [
      {
        "id": "1",
        "text": "Alpha"
      },
      {
        "id": "2",
        "text": "Bravo"
      },
      {
        "id": "3",
        "text": "Charlie"
      }
  ]
},
{
  "title": "Second Item",
  "attributes": [
      {
        "id": "1",
        "text": "Alpha"
      },
      {
        "id": "2",
        "text": "Bravo"
      },
      {
        "id": "3",
        "text": "Tango"
      }
  ]
}

尝试使用这些值进行搜索" attributes.text"字段:

{ "Alpha", "Bravo", "Charlie", "Delta" }

我只想找到" First Item"至少包含这些密钥但不包含其他密钥的文档。

尝试这些值:

{ "Alpha", "Bravo", "Delta" }

{ "Alpha", "Bravo" }

想要找到任何结果(因为#34; Charlie"缺失)。

谢谢

1 个答案:

答案 0 :(得分:1)

使用$in运算符匹配attributes对象数组中的值。以下查询将选择集合中text对象数组的attribute字段值为“Alpha”,“Bravo”或“Delta”的所有文档:

dbo.collection.find({
    "attributes.text": { 
         "$in": ["Alpha", "Bravo", "Delta"]
     }
});

这将返回两个文件:

/* 0 */
{
    "_id" : ObjectId("551187bae3757367bf8bd915"),
    "title" : "First Item",
    "attributes" : [ 
        {
            "id" : "1",
            "text" : "Alpha"
        }, 
        {
            "id" : "2",
            "text" : "Bravo"
        }, 
        {
            "id" : "3",
            "text" : "Charlie"
        }
    ]
}

/* 1 */
{
    "_id" : ObjectId("551187bae3757367bf8bd916"),
    "title" : "Second Item",
    "attributes" : [ 
        {
            "id" : "1",
            "text" : "Alpha"
        }, 
        {
            "id" : "2",
            "text" : "Bravo"
        }, 
        {
            "id" : "3",
            "text" : "Tango"
        }
    ]
}