mongodb-通过字段名的值查询文档

时间:2019-01-02 11:50:01

标签: javascript mongodb meteor mongoose aggregation-framework

鉴于我在User集合中有这些文档:

{
  userId: "user-a",
  points: {
    date: {
      1: 100,
      5: 20,
      11: 65,
    },
  },
}

{
  userId: "user-b",
  points: {
    date: {
      31: 20,
      25: 40,
      11: 15,
    },
  },
}

我想要做的是我要查询存在points.date.[number]值且[number] <7的用户。我该怎么办?

1 个答案:

答案 0 :(得分:3)

由于您的密钥未知,因此您必须使用$objectToArray聚合将它们转换为某个密钥值对,然后可以轻松地$match使用它

db.collection.aggregate([
  { "$match": { "points.date[number]": { "$exists": true }}},
  { "$addFields": {
    "match": {
      "$objectToArray": "$points.date"
    }
  }},
  { "$match": { "match.k": { "$lt": "7" }}},
  { "$project": { "match": 0 }}
])