python PyMongo -如何查询对象中属性的数量

omvjsjqw  于 2023-01-24  发布在  Python
关注(0)|答案(1)|浏览(119)

我需要从数百个类似这样的文档中检索数字数据:

{
  "_id": "123",
  "Notes": {
    "1222": "Something is here"
  },
  "BehavioralData": {
    "Folder1": {
      "Sex": "Male",
      "Age": "22",
      "Date": "",
      "ResearchGroup": "",
      "Institution": "University of Manitoba"
    },
    "MoCA": {
      "Visual-Executive": "",
      "Naming": "NameHere",
      "Attention": "",
      "Language": "",
      "Abstraction": "",
      "Delayed Recall": "",
      "Orientation": "",
      "Education": "",
      "Total": ""
    }
  }
}

输出应如下所示:

{
  "NotesLength": 1,
  "BehavioralLength": 2
}

你能建议我应该使用什么工具以及如何得到上面的结果吗?我很确定我应该使用聚合来解决这个问题,但是我不知道什么命令会有帮助。
更新:我正在用PyMongo库用Python写一个脚本。显然,PyMongo在$objectToArray部分有一些问题。我得到了以下错误:
汇总期间PlanExecutor错误::原因:$size的参数必须是数组,但类型为:空,完整错误:{"确定":0.0,"错误消息":'汇总期间PlanExecutor错误:原因:$size的参数必须是数组,但类型为:空","代码":17124,"代码名称":"位置17124","$群集时间":{"群集时间":时间戳(1658726074,53),"签名":{"哈希":b'L$\xcc\xdb\x0#f}\xbaZ\xc6\rB\xf5\xf6] \x00\xc3 ',"密钥标识":7064465060042637317}},"手术时间":时间戳(1658726074,53)}

n1bvdmb6

n1bvdmb61#

具有聚合管道。
由于NotesBehavioralData都是键-值对,因此需要使用$objectToArray将值转换为数组,然后使用$size获取数组的大小。

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      "NotesLength": {
        $size: {
          $objectToArray: "$Notes"
        }
      },
      "BehavioralLength": {
        $size: {
          $objectToArray: "$BehavioralData"
        }
      }
    }
  }
])

Sample Mongo Playground

相关问题