我对scala和cashbah都是新手。我在尝试着
- 如果存在(通过_id)更新文档,如果不存在则创建。
- 更新时,更新一些键值
- 在更新时,更新一些值是集合的键,将一些数据包含到这些集合中。
为了实现这一点,我写了这个:
DBObject = MongoDBObject("_id" -> uri.toString) ++
$addToSet("appearsOn" -> sourceToAppend) ++
$addToSet("hasElements" -> elementsToAppend) ++
$addToSet("hasTriples" -> triplesToAppend) ++
MongoDBObject("uDate" -> new DateTime)
/* Find and replace here! */
OntologyDocument.dao.collection.findAndModify(
query = MongoDBObject({"_id" -> uri.toString}),
update = update,
upsert = true,
fields = null,
sort = null,
remove = false,
returnNew = true
)
查看的文档,添加并更新_id
了一些新项目。appearsOn
hasElements
hasTriples
uDate
sourceToAppend
elementsToAppend
并且triplesToAppend
是List[String]
当我运行这个时,我得到了这个错误:
java.lang.IllegalArgumentException: fields stored in the db can't start with '$' (Bad Key: '$addToSet')
at com.mongodb.DBCollection.validateKey(DBCollection.java:1444) ~[mongo-java-driver-2.11.1.jar:na]
我没明白。这个查询有什么问题?$addToSet
不是领域,为什么 casbah 认为它是领域?我在这里做错了什么?