使用 $in 查询在 mongodb 中更新?

Posted

技术标签:

【中文标题】使用 $in 查询在 mongodb 中更新?【英文标题】:update in mongodb with $in query? 【发布时间】:2017-04-29 18:19:19 【问题描述】:

我有三个数组 coupon_ids、id_counter 和 increase_ctr。现在,任何索引处的 coupon_id 值都存在于 id_counter 和 increase_ctr 中的相同索引处。所以对于 coupon_id "584559bd1f65d363bd5d25f0" id_counter 的值是 200 而 increase_ctr 是 5。

coupon_ids = ["584559bd1f65d363bd5d25f0", "584559bd1f65d363bd5d25f1", "584559bd1f65d363bd5d25f2", "584559bd1f65d363bd5d25f4"];

id_counter = [200, 300, 400];

increase_ctr = [5, 6, 7];

couponmodel.findAndUpdate('_id' :  $in : coupons_ids , "id_counter": id_counter[index] /* how to get id_counter corresponding to index which is matched inside $in */,  id_counter: new_id_counter, $inc: curr_ctr: increase_ctr /* how to get increate_ctr corresponding to index which is matched inside $in */ , function(err, numberAffected, raw)
    if(err)

     else 

    
);

现在谁能告诉我如何编写上面的查询,以便对于 coupon_id[index] 我可以在查询中使用 "id_counter" = id_counter[index] 和 "increase_ctr" = increase_ctr[index]。

如果我们可以将 $update 与聚合一起使用,那么我的问题将很容易解决,但由于聚合不支持 $update,我该如何解决我的问题。

【问题讨论】:

一次更新一张优惠券。 是的,但它会增加我服务器上的时间,这就是为什么要考虑任何其他解决方案??为什么不能在单个查询中做到这一点?? 我怀疑。所有bulk update 都发生在客户端。没有往返开销。磁盘 IO 的数量取决于要更新的​​文档数量,而不是请求数量。您能否详细说明为什么您认为时间会增加? 我的意思是并行运行 10 个查询,您不认为在一个查询中更新它们会更好吗?? @AlexBlex 你能看看下面的问题吗,我遇到了你建议的批量更新问题。请回复。***.com/questions/41163644/… 【参考方案1】:

您不能使用不同的更新来根据不同的查询更新多个文档,但是更新单独的文档应该非常快,因为您不会等待文档上发生上一次更新。

【讨论】:

以上是关于使用 $in 查询在 mongodb 中更新?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 查询语法:如何在 $in 中使用 $isNull (pymongo api)

MongoDB安装和使用,MongoDB Like查询,Or查询,分页查询

Mongodb联合查询

mongodb 使用 $in 查询多对

MongoDB/mongoose 查询和 $in 运算符

MongoDB in Go (golang) with mgo:如何使用逻辑运算符进行查询?