从数组

时间:2018-06-13 16:12:14

标签: arrays mongodb mongodb-query aggregation-framework

我目前正在尝试查询mongodb中的数组,我想查找其中包含id:“ZhU76Ta”的所有字段,但要搜索的数组在其他文档中是barry,所以我的查询看起来像这样:{"punishdata.Entrys.0.id": "ZhU76Ta"}但这只查询数组中的第一个文档,我尝试了类似这样的{"punishdata.Entrys.*.id": "ZhU76Ta" },但这也不起作用,任何人都知道怎么做?

Document structure:
{
"_id" : ObjectId("5b212e540a975a231c85419c"),
"name" : "Starmixcraft",
"punishdata" : {
    "Entrys" : [ 
        {
            "id" : "ZhU76Ta",
            "end" : NumberLong(-2),
            "start" : NumberLong(1528901227837),
            "time" : NumberLong(-2)
        }
    ]
}
}

2 个答案:

答案 0 :(得分:1)

试试这段代码:

db.collectionName.find({"punishdata.Entrys.id": "ZhU76Ta" })

答案 1 :(得分:1)

您需要在此处使用$filter aggregation ,这样才能消除数组中不匹配的文档

db.collection.aggregate([
  {
    "$project": {
      "name": 1,
      "punishdata.Entrys": {
        "$filter": {
          "input": "$punishdata.Entrys",
          "as": "entry",
          "cond": {
            "$eq": [
              "$$entry.id",
              "ZhU76Ta"
            ]
          }
        }
      }
    }
  }
])