gpt4 book ai didi

java - 从 Spring+Mongo 中的文档数组中删除项目

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

我在 mongo 数据库中有一个这样的文档集合:

"_id" : ObjectId("592bc37c339e7a23788b4c7c"),
"trips" : [
{
"tripGcsId" : "5937f86e339e7a2a58ac3186",
"tripCounter" : NumberLong(1283),
"tripRef" : "hjkhjk"
},
{
"tripGcsId" : "5937f914339e7a2a58ac318b",
"tripCounter" : NumberLong(1284),
"tripRef" : "fjh"
}
]

以及服务器端的方法(Spring+Mongo):

public List<String> removeTripObject( List<String> tripIds )
{
Query query = Query.query( Criteria.where( "trips" ).elemMatch( Criteria.where( "tripGcsId" ).in( tripIds ) ) );

Update update = new Update().pullAll( "trips.tripGcsId", new Object[] { tripIds } );
getMongoTemplate().updateMulti( query, update, "ORDER" );
return updatedOrders;
}

参数tripIds是要从trips数组中删除的tripGcsIds列表。上面的方法给了我错误:写入失败,错误代码16837和错误消息“无法使用部分(trips.tripGcsId的行程)来遍历元素。

当我尝试使用 $ 运算符时,如其他 SO 答案中所述:

public List<String> removeTripObject( List<String> tripIds )
{
Query query = Query.query( Criteria.where( "trips" ).elemMatch( Criteria.where( "tripGcsId" ).in( tripIds ) ) );

Update update = new Update().pullAll( "trips.$.tripGcsId", new Object[] { tripIds } );
getMongoTemplate().updateMulti( query, update, "ORDER" );
return updatedOrders;
}

我收到此错误:写入失败,错误代码 16837 和错误消息“只能将 $pullAll 应用于数组。

我不确定这个 pullAll 命令在服务器端应该是什么样子。

最佳答案

您需要使用 $pull 更新运算符,该运算符采用查询来匹配并删除嵌入数组中的所有匹配行。

类似

public List<String> removeTripObject( List<String> tripIds ) {
Query query = Query.query( Criteria.where( "tripGcsId" ).in( tripIds ) );
Update update = new Update().pull("trips", query );
getMongoTemplate().updateMulti( new Query(), update, "ORDER" );
return updatedOrders;
}

引用

https://docs.mongodb.com/manual/reference/operator/update/pull/#remove-items-from-an-array-of-documents

关于java - 从 Spring+Mongo 中的文档数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44413686/

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