我的mongodb收藏是这样的
/* 1 */
{
"_id" : ObjectId("5d93fa1a5261dfb4940f166f"),
"hash" : "1",
"transfers" : [
{
"symbol" : "aba",
"from" : "sh",
"to" : "jh",
"amount" : 123.0
},
{
"symbol" : "bob",
"from" : "yh",
"to" : "sh",
"amount" : 12321.0
}
]
}
/* 2 */
{
"_id" : ObjectId("5d93fac65261dfb4940f1670"),
"hash" : "2",
"transfers" : [
{
"symbol" : "cbc",
"from" : "sh",
"to" : "jh",
"amount" : 222.0
},
{
"symbol" : "bob",
"from" : "yh",
"to" : "sh",
"amount" : 333.0
}
]
}
/* 3 */
{
"_id" : ObjectId("5d93fead5261dfb4940f1672"),
"hash" : "3",
"transfers" : [
{
"symbol" : "bob",
"from" : "sh",
"to" : "jh",
"amount" : 333.0
},
{
"symbol" : "bob",
"from" : "yh",
"to" : "sh",
"amount" : 444.0
}
]
}
amount
的{{1}}字段提取有限数量的排序集合当我尝试使用此命令时
transfers
返回如下
db.getCollection('sh_test_transaction').find({"transfers.symbol":"bob"}).sort({'transfers.amount':-1}).limit(2)
但是我想要的结果是这样的
/* 1 */
{
"_id" : ObjectId("5d93fa1a5261dfb4940f166f"),
"hash" : "1",
"block_number" : 1.0,
"transfers" : [
{
"symbol" : "aba",
"from" : "sh",
"to" : "jh",
"amount" : 123.0
},
{
"symbol" : "bob",
"from" : "yh",
"to" : "sh",
"amount" : 12321.0
}
]
}
/* 2 */
{
"_id" : ObjectId("5d93fead5261dfb4940f1672"),
"hash" : "3",
"block_number" : 3.0,
"transfers" : [
{
"symbol" : "bob",
"from" : "sh",
"to" : "jh",
"amount" : 333.0
},
{
"symbol" : "bob",
"from" : "yh",
"to" : "sh",
"amount" : 444.0
}
]
}
(我不需要更改原始数据)
由于我是mongodb world的新手,因此需要您的帮助。
谢谢你〜!
答案 0 :(得分:0)
您想要所有条目中最高的两个金额吗?听起来您需要使用聚合框架。但是您还希望它们嵌入原始文档中吗?没有文档中可能存在的其他传输?
我不记得确切的命令,但我会这样尝试:
在设计聚合函数之前,有很多东西要首先考虑,但这确实值得!
如果您只是在学习,请尝试编写一个普通查询,该查询将获取所有条目并手动执行所有操作,并根据最高的两个元素检查每个元素。比较聚合的速度。
快乐的编码!
第一次开始就是这样,根据您的要求,您将不得不做更多的伏都教徒:)
db.sh_test_transaction.aggregate([
{ $match: { "transfers.symbol": "bob" } },
{ $unwind : "$transfers" },
{ $sort : { "transfers.amount" : -1 } },
{ limit: 2 },
....
])