gpt4 book ai didi

java - 使用 Java 驱动程序运行聚合 - MongoDB

转载 作者:行者123 更新时间:2023-12-01 10:14:22 25 4
gpt4 key购买 nike

使用我使用的 MongoDB shell:

db.bios.aggregate(
[
{$match:{"contribs.0.name":{"$exists":1}}},
{$project: {contribs:{$arrayElemAt:["$contribs",0]}}}
]
)

如何使用 Java 驱动程序 (2.14.1) 进行相同的查询?我尝试:

首先,我为 $match 阶段创建一个 DBObject:

DBObject match = new BasicDBObject("$match",new BasicDBObject("contribs.0.name",
new BasicDBObject("$exists",1)));

然后我创建一个BasicDBList:

BasicDBObject obj = new BasicDBObject("$contribs",0);

BasicDBList arrayElemAt = new BasicDBList();
arrayElemAt.add(obj);

这是$project阶段:

DBObject project1 = new BasicDBObject("$project", new BasicDBObject("contribs",
new BasicDBObject("$arrayElemAt",arrayElemAt)));

最后我创建聚合管道:

List<DBObject> list = new ArrayList<>();
list.add(match);
list.add(project1);

AggregationOutput output = this.coll.aggregate(list);

$Match 阶段有效,但 $project 无效。

我收到错误:“errmsg”:“无效的运算符 '$contribs'”,“code”:15999

最佳答案

当您打算创建List时,您创建了一个DBObject。另外,DBList 已被弃用一段时间了。习惯使用标准列表符号:

    List<DBObject> pipeline = Arrays.<DBObject>asList(
new BasicDBObject(
"$match",
new BasicDBObject(
"contribs.0", new BasicDBObject("$exists",true)
)
),
new BasicDBObject(
"$project",
new BasicDBObject(
"contribs", new BasicDBObject("$arrayElemAt", Arrays.asList("$contribs",0))
)
)
);

AggregationOutput output = this.coll.aggrgate(pipeline);

另请注意,在现代驱动程序中,您确实应该使用 Document 代替所有 DBObject 类型。

关于java - 使用 Java 驱动程序运行聚合 - MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997136/

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