如何解决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 举报,一经查实,本站将立刻删除。