我有一个名为Entity&的集合。下面是它的架构
Entity {
Owner {
id
}
Tags [
{id :
name : }
{id :
name : }
]
}
我正在尝试使用匹配的所有者ID&标记ID然后从实体中删除标记 p>
BasicDBObject query = new BasicDBObject("Tags.id", tagId).append("Owner.id", ownerId);
BasicDBObject updQuery = new BasicDBObject("$pull",
new BasicDBObject("Tags", new BasicDBObject("id", tagId)));
updQuery.update(query, updQuery, true);
其中实体是MongoJackDaoImpl实例。
当我尝试提取与标记ID&匹配的空结果时所有者ID,我得到以下异常
com.mongodb.WriteConcernException: Write failed with error code 16836 and error message 'Cannot apply $pull to a non-array value'
at com.mongodb.operation.BaseWriteOperation.convertBulkWriteException(BaseWriteOperation.java:239)
有没有办法在更新查询中检查空结果以避免错误?
答案 0 :(得分:0)
发生错误是因为UPSERT设置为false,因为当select select查询返回空记录时,更新失败。
通过在BasicDBObject构造函数
中将UPSERT boolean设置为true来修复上面的代码BasicDBObject updQuery = new BasicDBObject("$pull",
new BasicDBObject("Tags", new BasicDBObject("id", tagId)));
updQuery.update(query, updQuery, true, true);