如何在mongodb中基于$ OR运算符存储和更新匹配值? 尝试失败:有了一个简单的技巧!

我的收藏集包含嵌套的文档,我正在尝试使“文本”出现在任何嵌套字段中,例如:

*Server

我能够获得带有“文本”字段的文档,如上所示

现在,我想为每个处理的文档存储“文本”,并在该文档中使用它更新另一个字段“名称”。我很难在查询中编写这种逻辑。

尝试失败:

var rerun = { $or: [
                               {"code_exception.java_40.code.Text": { $exists : true,$ne : "" } },//13816
                               {"code_exception.java_15.code.Text":{ $exists : true,$ne : ""} },//13485
                               {"code_exception.java_10.code.Text":{ $exists : true,//12994
                               {"code_exception.java_2.code.Text": { $exists : true,//13294
                               {"code_exception.java_4.code.Text": { $exists : true,//13437
                               {"code_exception.java.code.Text":   { $exists : true,//13192
                               {"code_exception.java_1.code.Text": { $exists : true,$ne : ""} }//12951
                              ]}
db.collection.find(rerun).count()//14093

db.collection.find(rerun).forEach(function(document) { db.collection.update( { "_id": document._id },{ "$set": { "Name": document.code_exception.java_*.code.Text } } ); }) 将替换为数字[40,15,10,2,4,1,]。我知道这行不通,但是有人可以建议一种在$ OR中获取“文本”的匹配值的方法吗?

例如

  • *符合doc1条件,因此可以即时存储"code_exception.java_15.code.Text":{ $exists : true,$ne : ""}并更新为同一doc1提交的“名称”。
  • 类似地,如果集合中的"code_exception.java_15.code.Text"doc2条件匹配,则它可以即时存储"code_exception.java.code.Text":{ $exists : true,$ne : ""}并更新针对同一doc1提交的“名称”。

有了一个简单的技巧!

由于如果我能够找到对应于"code_exception.java.code.Text"的{​​{1}},那么我需要更新集合中的字段name,其中*可以是数字[40,10, 2,1,]构成以上字段。

解决方案是分别运行每个过滤器并更新Text字段。肯定会有多余的更新,但这不会成为问题,因为如果code_exception.java_*.code.Text遗漏了某些文档,则可能会被Name或其他过滤器填充。

我使用pymongo客户端进行黑客入侵:

java_40.code

将对每个过滤器执行一次以上代码7次,并更新java_1.code字段!

有人有更好的解决方案吗?

kxkxkxkx 回答:如何在mongodb中基于$ OR运算符存储和更新匹配值? 尝试失败:有了一个简单的技巧!

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3112538.html

大家都在问