gpt4 book ai didi

java - 使用 spring-data-mongodb 将数组作为参数传递给过滤器函数

转载 作者:可可西里 更新时间:2023-11-01 10:38:49 40 4
gpt4 key购买 nike

我有这个文件集:

[
{
"name": "name1",
"data": [
{
"numbers": ["1","2","3"]
}
]
},
{
"name": "name2",
"data": [
{
"numbers": ["2","5","3"]
}
]
},
{
"name": "name3",
"data": [
{
"numbers": ["1","5","2"]
}
]
},
{
"name": "name4",
"data": [
{
"numbers": ["1","4","3"]
}
]
},
{
"name": "name5",
"data": [
{
"numbers": ["1","2"]
}
]
}
]

当作为参数传递的数组是 data.numbers 的子集时,我想获取此集合的所有文档。

这是我正在使用的聚合。

db.testing.aggregate(
[
{ "$match" : { "data.numbers" : { "$exists" : true } } },
{ "$project" : { "is_subset" : { "$filter" : { "input" : "$data", "as" : "d", "cond" : { "$setIsSubset" :[ ["1"],"$$d.numbers"] } } } } },
{ "$match" : { "is_subset.0" : { "$exists" : true } } }]
);

我正在尝试在 Spring Data MongoDB 中重现上述聚合。

如何在$filter$setIsSubset 函数中将数组作为参数传递?

 operations.aggregate(
newAggregation(Testing.class,
match(where("data.numbers").exists(true)),
project().and(
filter("data")
.as("d")
.by(???))
.as("is_subset"),
match(where("is_subset.0").exists(true))
), Testing.class);

最佳答案

我解决了我的问题。

operations.aggregate(
newAggregation(Testing.class,
match(where("data.numbers").exists(true)),
project("id", "name").and(
filter("data")
.as("d")
.by(context -> new Document("$setIsSubset", Arrays.asList(numbers, "$$d.numbers"))))
.as("is_subset"),
match(where("is_subset.0").exists(true))
), Testing.class);

我创建了一个包含 $filter 条件中所需内容的文档。

new Document("$setIsSubset", Arrays.asList(numbers, "$$d.numbers"))

关于java - 使用 spring-data-mongodb 将数组作为参数传递给过滤器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51084824/

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