Я пытаюсь написать общий upsert для базы данных клеща в R.
код питона будет:
collection.update({'symbol':'somesymbol', 'sha':'SoM3__W3|Re|[email protected]'},
{'$set':{segment:5},
'$addToSet': {'parent':parent_id}}},
upsert=True)
в РИ я использую rmongodb и пытается построить BSON объекты
#get the query
mtch_b<-mongo.bson.buffer.create()
mongo.bson.buffer.append(mtch_b, "symbol", "somesymbol")
mongo.bson.buffer.append(mtch_b, "sha", "SoM3__W3|Re|[email protected]")
mtch<-mongo.bson.from.buffer(mtch_b)
#set the segment
qry_b<-mongo.bson.buffer.create()
mongo.bson.buffer.start.object(qry_b, "$set")
mongo.bson.buffer.append(qry_b, "segment", 5)
mongo.bson.buffer.start.object(qry_b, "$addToSet")
mongo.bson.buffer.append(qry_b, "parent", "Initial")
mongo.bson.buffer.finish.object(qry_b) #end of $addtoSet object
mongo.bson.buffer.finish.object(qry_b) #end of $set object
qry_bsn <-mongo.bson.from.buffer(qry_b)
mongo.update(mongo, "M__test.tmp", mtch, qry_bsn, flags=mongo.update.upsert)
Когда я запускаю это я получаю сообщение об ошибке:
"The dollar ($) prefixed field '$addToSet' in '$addToSet' is not valid for storage."
глядя на qry_bsn:
qry_bsn
$set : 3
segment : 4
0 : 1 1.000000
1 : 1 2.000000
2 : 1 3.000000
3 : 1 4.000000
$addToSet : 3
parent : 2 Initial
Когда я извлекаю $ addToSet, добавить в конец и закончить объекты $ addToSet объекта запроса работает нормально.
Любая помощь в том, как это сделать, будет очень признательна.
Если вы видите запрос, '$ addToSet' отображается на уровне сегмента, что неверно. Он должен отображаться на уровне '$ set'. Это означает, что создание 'bson buffer' неправильное. – BatScream