当前位置: 首页 > 知识库问答 >
问题:

在mongodb中知道与$In运算符匹配的数组元素的索引吗?

鄂伟兆
2023-03-14
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 {

            }
        });

Couponmodel模式

var CouponSchema = new Schema({
    category: {type: String},
    coupon_name: {type: String}, // this is a string
});

更新--正如user3124885所建议的那样,聚合在性能上并没有更好,谁能告诉我在MongoDB中聚合和普通查询之间的性能差异。哪一个更好??

更新-我在SO MongoDB上读到这个问题-aggregation-match-vs-find-speed。这里用户自己评论说,两者都花了同样的时间,也通过看到vlad-z的回答我认为聚合更好。如果你们中有人在mongodb上工作过,请告诉我你对此有什么看法。

{$map: {
    input: {
        elt1: "$array1",
        elt2: "$array2"
    },
    in: ["$elt1", "$elt2"]
}

共有1个答案

越景天
2023-03-14

假设我们在数据库集合中有以下内容:

> db.couponmodel.find()
{ "_id" : "a" }
{ "_id" : "b" }
{ "_id" : "c" }
{ "_id" : "d" }

我们希望在集合中搜索以下ID

var coupons_ids = ["c", "a" ,"z"];

然后我们必须建立一个动态投影状态,以便能够投影正确的索引,因此我们必须将每个id映射到其对应的索引

var conditions = coupons_ids.map(function(value, index){
    return { $cond: { if: { $eq: ['$_id', value] }, then: index, else: -1 } };
});
db.couponmodel.aggregate([
    { $match : { '_id' : { $in : coupons_ids } } },
    { $project: { indexes : conditions } },
    { $project: {
        index : {
            $filter: { 
                input: "$indexes", as: "indexes", cond: { $ne: [ "$$indexes", -1 ] }
                }
            }
        } 
    },
    { $unwind: '$index' }
]);
{ "_id" : "a", "index" : 1 }
{ "_id" : "c", "index" : 0 }
 类似资料:
  • 我试图检索一个带有特定'_ID'的文档和一个带有另一个特定'_ID'的嵌入文档。 我的文档是一个目录,它包含一个课程数组。 示例数据: 在mongod中,我运行这个聚合查询,并得到我想要的结果: 正如我前面提到的,我已经得到了一个目录实例,里面有一个课程实例。

  • 问题内容: 在Python中,我们可以使用来获取数组中值的索引。 但是,当我尝试执行NumPy数组时: 我得到: AttributeError:“ numpy.ndarray”对象没有属性“ index” 我如何在NumPy数组上执行此操作? 问题答案: 使用来获得,其中一个给定的条件是指数。 例子: 对于称为的2D : 对于一维数组: 请注意,这也适用于像条件,,等等… 您也可以使用方法创建的子

  • 我有这样的元素: 我想检索没有已定义。在这种情况下,元素。 对于这个问题,我得到了相反的结果: 我尝试了和的组合,但是我没有找到合适的解决方案。

  • 我知道如何通过谓词查找列表的第一个元素:Java8通过谓词查找第一个元素 有没有一种简单的方法可以得到那个元素的索引? 编辑:链接的问题确实提供了答案,但我在搜索时找不到它,因为它的措辞。因此,我宁愿保留这个问题。

  • 来自< code>$elementMatch的MongoDB文档: $elemMatch运算符将包含数组字段的文档与至少一个与所有指定查询条件匹配的元素匹配。 但是,如何将包含数组字段的文档与与查询匹配的所有元素进行匹配? 例如,我有这样的文档: 我需要匹配所有具有所有 如果我使用以下查询: 该文档将被匹配,因为至少有一个价格 我也试过这个,但它似乎不工作: 有没有办法排除查看所有价格而不是至少一

  • 问题内容: 我有一个很长的浮点数列表,范围从1到5,称为“平均值”,我想返回小于a或大于b的元素的索引列表 但是令人惊讶的是,“ matches”的输出中有很多重复,例如。 为什么会这样呢? 问题答案: 您正在使用它将仅在列表中找到您的值的 第一个 匹配项。因此,如果在索引2和索引9处的值为1.0,则无论列表中发生了多少次,都将 始终 返回。 使用到索引添加到您的循环,而不是: 您可以将其折叠为列