在子子子数组中搜索

时间:2015-03-02 12:47:04

标签: mongodb

来自数据库的示例文档

{
  "_id": ObjectId("54f44a657f8b9a1d318b4567"),
  // other fields
  "ligaments": [
    [
      {
        "data": "dia",
        "order": 0
      },
      {
        "data": "hub",
        "order": 1
      }
    ],
    [
      {
        "data": "pcd",
        "order": 0
      },
      {
        "data": "width",
        "order": 1
      }
    ]
  ]
}

我需要找到ligaments字段包含data: 'parameter'属性的所有条目。我如何进行这样的查询?

2 个答案:

答案 0 :(得分:0)

如果要在嵌套数组中搜索,可以使用$elemMatch运算符进行搜索:

//returns all the documents that have data equal to 'pcd' or 'width'
db.collection.find({ligaments: {$elemMatch: {$elemMatch: { data: {$in: ['pcd', 'width']}}}}});

如果要指定用户定义的参数,可以自定义查询:

//returns all the documents that have data equal to 'parameter'
db.collection.find({ligaments: {$elemMatch: {$elemMatch: { data: 'parameter'}}}});

答案 1 :(得分:0)

首先你的文档结构很复杂,但是,如果你想找到你的输出,那么试试下面的脚本

    db.collectionName.aggregate({
    "$unwind": "$ligaments"
}, {
    "$unwind": "$ligaments"
}, {
    "$match": {
    "ligaments.data": {
        "$in": ["pcd", "width"]
    }
    }
}, {
    "$project": {
    "_id": 0,
    "ligaments": "$ligaments"
    }
})