MongoDb—通过聚合值子集的乘积来查询集合
假设我有一个收藏:MongoDb—通过聚合值子集的乘积来查询集合,mongodb,Mongodb,假设我有一个收藏: [ { _id: product_a, values: [ { id: 1, value: 0 }, { id: 2, value: 1 }, { id: 3, value: 2 }, ] }, { _id: product_b, values: [ { id: 1, value
[
{
_id: product_a,
values: [
{ id: 1, value: 0 },
{ id: 2, value: 1 },
{ id: 3, value: 2 },
]
},
{
_id: product_b,
values: [
{ id: 1, value: 1 },
{ id: 2, value: 2 },
{ id: 3, value: 2 },
]
},
// etc ...
];
有没有办法通过聚合“值”子集的乘积来查询此集合
如果我查询{values:[1,3]},我会得到如下结果:
[
{
_id: product_a,
result: 0 // since 0 * 2 = 0
},
{
_id: product_b,
result: 2 // since 1 * 2 = 2
},
// etc ...
];
下面是如何使用2.2聚合框架实现模式的方法。注意,如果id/值对以id作为键存储,则这将简单得多 您的聚合: 请注意,如果文档的结构是:
{u id:“product_x”,值:[{id1:value},{id2:value}等]}
现在使用以下命令从shell运行查询:
>db.collection.aggregate(管道)
或者通过
db.runCommand({“聚合”:“集合”,“管道”:[…])从代码中调用。
您的模式是固定的还是可以将值存储为{“id1”:“值”,“id2”:“值”…}?i、 你的id值是预先知道的吗?谢谢Asya,看起来棒极了!我想我必须使用Mongo的开发发行版才能拥有这个功能,对吗?
[
{
"$unwind" : "$values"
},
{
"$match" : {
"values.id" : {
"$in" : [
1,
3
]
}
}
},
{
"$project" : {
"_id" : 1,
"val1" : {
"$cond" : [
{
"$eq" : [
"$values.id",
1
]
},
"$values.value",
-1
]
},
"val3" : {
"$cond" : [
{
"$eq" : [
"$values.id",
3
]
},
"$values.value",
-1
]
}
}
},
{
"$group" : {
"_id" : "$_id",
"val1" : {
"$max" : "$val1"
},
"val3" : {
"$max" : "$val3"
}
}
},
{
"$project" : {
"_id" : 1,
"result" : {
"$multiply" : [
"$val1",
"$val3"
]
}
}
}
]