gpt4 book ai didi

Mongodb 与 future 文档的聚合

转载 作者:可可西里 更新时间:2023-11-01 09:14:01 26 4
gpt4 key购买 nike

我正在寻找有关如何在 MongoDB 中最好地处理此类查询的一些指导。

我有一个购买数据库,每个数据库都有一个类(class)属性以及购买者的购买日期。

我想要的是某人购买初始产品后发生的购买列表。

所以 - 这里有一些伪查询:

// first find everyone who signed up for course A
{ course: 'a' }

然后

/*
out of those people, filter for those who in the future signed up
for another course
*/

{
course: { $in: ['b','c','d']},
date: { $gt: $courseA.purchaseDate }
}

聚合是否可能?或者我会为每次初始购买进行多次数据库调用以检查是否有 future ?

以下是每次购买的数据示例:

{ email: 'wes@example.com', course: 'a', purchaseDate: 10 },
{ email: 'wes@example.com', course: 'b', purchaseDate: 20 }, // match
{ email: 'wes@example.com', course: 'c', purchaseDate: 5 }, // not
{ email: 'nancy@example.com', course: 'a', purchaseDate: 5 },
{ email: 'nancy@example.com', course: 'c', purchaseDate: 6 }, // match
{ email: 'nancy@example.com', course: 'b', purchaseDate: 10 }, // match
{ email: 'nancy@example.com', course: 'd', purchaseDate: 1 }, // not

最佳答案

在 Twitter 上的一些帮助下找到了答案

.aggregate([
// Project the target purchasedate
{ $match: { course: { $in: ['JS3', 'RDX', 'WTF', 'RFB', 'ES6']}}},
{ $project: {
email: 1, amount: 1, course: 1, purchaseDate: 1,
target: {
$cond: {
if: { $eq: ['$course', 'JS3'] },
then: "$purchaseDate",
else: 0,
}
}
}},
// Group records by email, storing the target and the highest encountered purchase date
{ $group: {
_id: '$email',
courses: { $push: '$course'},
amounts: { $push: '$amount'},
count: { $sum: 1 },
spent: { $sum: '$amount' },
target: { $first: '$target'},
max: { $max: '$purchaseDate'}
}},
// // Check if the highest encountered date is greater then the target
{ $project: {
email: 1, course: 1, amounts: 1, spent: 1, count: 1, courses: 1, target:1, max: 1,
selected: { $cond: [{ $gt: ['$max', '$target']}, true, false] }
}},
// Filter out the non-matches
{ $match: {
target: { $gt: 0 },
selected: true,
spent: { $gt: 0 },
}},
{ $sort: { spent: -1 }}
])

关于Mongodb 与 future 文档的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41981234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com