MongoDB 展开错误:无法编码类型的对象:<class 'set'>
Posted
技术标签:
【中文标题】MongoDB 展开错误:无法编码类型的对象:<class \'set\'>【英文标题】:MongoDB Unwind Error: cannot encode object of type: <class 'set'>MongoDB 展开错误:无法编码类型的对象:<class 'set'> 【发布时间】:2022-01-07 16:10:41 【问题描述】:希望你没事。
我似乎找不到通过“股权 ID”聚合以下文档的方法。
"_id":
"$oid": "6001dc246192c700013e8252"
,
"user": "blablabla",
"_type": "User::Individual",
"created_at":
"$date": "2021-01-15T18:17:11.130Z"
,
"integrations": [
"_id":
"$oid": "6001dc62e7a0970001258da8"
,
"status": "completed",
"authentication_failed_msg": null
],
"portfolios": [
"_id":
"$oid": "6001dc62e7a0970001258da9"
,
"_type": "SimplePortfolio",
"transactions": [
"_id":
"$oid": "6001dc62e7a0970001258daa"
,
"settlement_period": 2,
"expenses": 0,
"source": "integration",
"_type": "Transaction::Equity::Buy",
"date":
"$date": "2020-03-02T00:00:00.000Z"
,
"shares": 100,
"price": 13.04,
"equity_id": "abcd"
,
"_id":
"$oid": "6001dc62e7a0970001258dab"
,
"settlement_period": 2,
"expenses": 0,
"source": "integration",
"_type": "Transaction::Equity::Buy",
"date":
"$date": "2020-03-02T00:00:00.000Z"
,
"shares": 1000,
"price": 1.03,
"equity_id": "efgh"
我尝试了类似的东西
db.collection.aggregate(["$unwind": '$portfolios.transactions',
"$group" : "_id": "$equity_id"])
遇到错误InvalidDocument: cannot encode object: '$portfolios.transactions', of type: <class 'set'>
理想情况下,我想要一个按user
和equity_id
分组的列表及其份额的总和。有谁知道错误是由我的聚合还是文档结构引起的?
【问题讨论】:
试用 mongodb 文档非常好,它有这个 unwind example 你是对的@Takis_,感谢您指出这一点。我完全错过了这个“两阶段放松”的东西,这正是我所需要的。 【参考方案1】:你应该$unwind
两次。
db.collection.aggregate([
"$unwind": "$portfolios"
,
"$unwind": "$portfolios.transactions"
,
"$group":
"_id": "$portfolios.transactions.equity_id"
])
mongoplayground
【讨论】:
哇,谢谢@YuTing。我从来没有想过要做两次,我想我得再研究一下:)以上是关于MongoDB 展开错误:无法编码类型的对象:<class 'set'>的主要内容,如果未能解决你的问题,请参考以下文章
nodejs/mongoDB - 类型错误:无法读取未定义的属性“集合”
nodejs/mongoDB - 类型错误:无法读取未定义的属性“集合”