java-在Spring Mongo中从文档数组中删除项目
作者:互联网
我在mongo db中有这样的文档集合:
"_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.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 update运算符,该运算符使用查询来匹配和删除嵌入式数组中的所有匹配行.
就像是
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;
}
参考
标签:jhipster,java,spring,mongodb,spring-mongodb 来源: https://codeday.me/bug/20191013/1908041.html