gpt4 book ai didi

java - MongoDB 在不知道键的情况下搜索嵌套对象

转载 作者:行者123 更新时间:2023-11-30 01:42:26 25 4
gpt4 key购买 nike

由于使用异步 Java 驱动程序 + BSON,我有一个对象列表,这些对象被赋予了一些任意的对象键。

enter image description here

我的问题是,jobStatuses 是字典项的任意列表,我不知道其中的键,我不知道如何访问其子值。最后,我尝试构建一个查询,在给定潜在对象 ID 列表的情况下,如果任何 jobStatus.*._id 为 true,则返回该查询。

因此,我会给出一个 ID 列表,并且如果 jobStatuses 中的任何项目具有任何给定的 ID,则希望返回 true。有什么想法吗?

最佳答案

让我们试试这个:

db.yourCollectionName.aggregate([
{
$project: {
_id: 0,
jobStatutses: { $arrayElemAt: [{ $objectToArray: "$jobStatutses" }, 0] }
}
}, {
$match: { 'jobStatutses.v._id': { $in: [ObjectId("5d6d8c3a5a0d22d3c84dd6dc"), ObjectId("5d6d8c3a5a0d22d3c84dd6ed")] } }
}
])

收集数据:

/* 1 */
{
"_id" : ObjectId("5e06319c400289966eea6a07"),
"jobStatutses" : {
"5d6d8c3a5a0d22d3c84dd6dc" : {
"_id" : ObjectId("5d6d8c3a5a0d22d3c84dd6dc"),
"accepted" : "123",
"completed" : 0
}
},
"something" : 1
}

/* 2 */
{
"_id" : ObjectId("5e0631ad400289966eea6dd1"),
"jobStatutses" : {
"5d6d8c3a5a0d22d3c84dd6ed" : {
"_id" : ObjectId("5d6d8c3a5a0d22d3c84dd6ed"),
"accepted" : "456",
"completed" : 0
}
},
"something" : 2
}

/* 3 */
{
"_id" : ObjectId("5e0631cd400289966eea7542"),
"jobStatutses" : {
"5e06319c400289966eea6a07" : {
"_id" : ObjectId("5e06319c400289966eea6a07"),
"accepted" : "789",
"completed" : 0
}
},
"something" : 3
}

输出:

/* 1 */
{
"jobStatutses" : {
"k" : "5d6d8c3a5a0d22d3c84dd6dc",
"v" : {
"_id" : ObjectId("5d6d8c3a5a0d22d3c84dd6dc"),
"accepted" : "123",
"completed" : 0
}
}
}

/* 2 */
{
"jobStatutses" : {
"k" : "5d6d8c3a5a0d22d3c84dd6ed",
"v" : {
"_id" : ObjectId("5d6d8c3a5a0d22d3c84dd6ed"),
"accepted" : "456",
"completed" : 0
}
}
}

您所需要的只是检查是否至少有一个文档从给定列表的数据库返回,因此我们不需要担心文档结构,然后只需执行 result.length您的代码表示至少有一个文档与输入列表匹配。

关于java - MongoDB 在不知道键的情况下搜索嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59503339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com