【发布时间】:2017-04-26 16:40:36
【问题描述】:
我正在将聚合与 mongoDB 一起使用,现在我在这里遇到了一个问题,我正在尝试使用 $in 运算符匹配我的输入数组中存在的文档。现在我想知道输入数组中元素的索引,谁能告诉我该怎么做。
我的代码
var coupon_ids = ["58455a5c1f65d363bd5d2600", "58455a5c1f65d363bd5d2601","58455a5c1f65d363bd5d2602"]
couponmodel.aggregate(
{ $match : { '_id': { $in : coupons_ids }} },
/* Here i want to know index of coupon_ids element that is matched because i want to perform some operation in below code */
function(err, docs) {
if (err) {
} else {
}
});
优惠券模型架构
var CouponSchema = new Schema({
category: {type: String},
coupon_name: {type: String}, // this is a string
});
更新- 正如user3124885所建议的那样,聚合在性能上并不好,任何人都可以告诉我聚合和mongodb中普通查询之间的性能差异。哪个更好??
更新- 我在 SOmongodb-aggregation-match-vs-find-speed 上阅读了这个问题。在这里,用户自己评论说两者都需要相同的时间,而且通过看到vlad-z 的答案,我认为聚合更好。如果你们中的任何人都曾在 mongodb 上工作过,请告诉我您对此有何看法。
更新- 我使用了包含 30,000 行的示例 json 数据,并尝试与聚合匹配 v/s 查找查询聚合在 180 毫秒内执行,而查找查询需要 220 毫秒。我还运行了 $lookup,它也花费了不超过 500 毫秒的时间,所以认为聚合比普通查询快一点。如果你们中有人尝试过使用聚合,请纠正我,如果没有,那为什么??
更新-
我阅读了这篇文章,其中用户使用以下代码代替 $zip SERVER-20163,但我不知道如何使用以下代码解决我的问题。那么谁能告诉我如何使用下面的代码来解决我的问题。
{$map: {
input: {
elt1: "$array1",
elt2: "$array2"
},
in: ["$elt1", "$elt2"]
}
现在任何人都可以帮助我,这对我来说真的是一个很大的帮助。
【问题讨论】:
-
为什么不直接执行
find({_id: {$in: coupons_ids}}),然后在coupons_ids中搜索返回的文档中的_id值? -
因为使用聚合服务器过载会减少,这就是为什么要考虑使用聚合?另外你能告诉我聚合比普通查询慢还是慢很多?此外,我还运行了一些案例,其中我有 30000 个样本数据并且聚合比正常查询快一点。如果我的方向错误,请纠正我??
-
匹配元素后你想在聚合查询中做什么?
-
@KevinSmith 我想以与匹配的 coupon_id 相同的索引返回 coupon_ctr
-
有没有
couponmodelcollection里面的文档结构的例子
标签: mongodb mongoose aggregation-framework