微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Mongo 查找两个字段值是否不相等

如何解决Spring Mongo 查找两个字段值是否不相等

我有以下 json

"_id" : ObjectId("5fd0b6d2db14e72272560029"),"fooId" : "","fooNames" : [],"fooDetails" : [ 
    {
        "foId" : "5fd0b63ddb14e7227255fffb","fooSubId" : "5fd0b6d2db14e72272560029"
    }
],...

我需要提取那些 _id 不等于嵌套对象 fooDetails.fooSubId 的文档的结果。

我如何在春季 Mongo 中做到这一点?

--更新-- 例如下面给出的是我收藏中的条目

输入一

 {
        "_id": ObjectId("5fd0b63ddb14e7227255fff1"),"fooId": "","fooNames": [],"fooDetails": [
          {
            "foId": "5fd0b63ddb14e7227255fffb","fooSubId": "5fd0b63ddb14e7227255fff1"
          },]
      }

输入二

{
    "_id": ObjectId("5fd0b63ddb14e7227255fff2"),"fooDetails": [
      {
        "foId": "5fd0b63ddb14e7227255fffb","fooSubId": "5fd0b63ddb14e7227255fff3",}
    ]
  }

条目三

{
    "_id": ObjectId("5fd0b63ddb14e7227255fff2"),"fooDetails": []
  }

结果应该过滤掉第一个,它应该只给出以下两个:

结果一

{
    "_id": ObjectId("5fd0b63ddb14e7227255fff2"),}
    ]
  }

结果二

{
    "_id": ObjectId("5fd0b63ddb14e7227255fff4"),"fooDetails": []
  }

解决方法

如果我理解正确,您需要一个类似这样的查询:

仅使用 fooDetails$set 更新字段 $filter

使用 $set 替换字段,使用 $filter 您可以在数组中查找对象,其中 fooSubId 等于 _id

因此,fooSubId 不等于 _id 的数组中的每个对象都不会在数组中。

编辑,使用 $toObjectId 比较相等的对象:

db.collection.aggregate([{
    "$set": {
      "fooDetails": {
        "$filter": {
          "input": "$fooDetails","as": "id","cond": { "$eq": [ {"$toObjectId": "$$id.fooSubId"},"$_id" ] }
        }
      }
    }
}])

示例here

通过此查询,您可以将 this 答案检查到 Spring 中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。