Предположим, мои данные такие:
([{
attribute: 'amount'
rank: 1
value: '500'
rules:
[{
name:'R1',
parent: 'true',
successor_attr: 'project',
},
name:'R2',
parent: 'true',
successor_attr: 'type',
}]
})]
Теперь, в правилах списка, я хочу добавить объект, если его нет, или оставить его как есть, по сути, операция «upsert».
Чтобы добиться того же, я пытался:
BasicDBObject criteria = new BasicDBObject();
criteria.append("attribute", doc.getString("attribute"));
criteria.append("value", doc.getString("value"));
criteria.append("rank", doc.getInteger("rank"));
criteria.append("rules.name", list.getString("name"));
criteria.append("rules.parent", list.getString("parent"));
criteria.append("rules.successor_attr", list.getString("attribute"));
//To add the object if not present already.
BasicDBObject docdetail = new BasicDBObject();
docdetail.put("name", list.getString("name"));
docdetail.put("parent", list.getString("parent"));
docdetail.put("successor_attr", list.getString("attribute"));
BasicDBObject modifiedObject = new BasicDBObject();
modifiedObject.put("$push", new BasicDBObject().append("rules",docdetail));
collection1.update(criteria,modifiedObject,true,false);
При попытке сделать то же самое, я получаю сообщение об ошибке:
Write failed with error code 2 and error message 'The field 'rules' must be an array but is of type object in document {no id}'
Ошибка в последней строке (collection1.update ...). Пожалуйста, предложите, как я могу удалить эту ошибку и достичь желаемой функциональности.