R:“$addToSet”中的字段“$addToSet”对于存储无效:rmongodb
Posted
技术标签:
【中文标题】R:“$addToSet”中的字段“$addToSet”对于存储无效:rmongodb【英文标题】:R: field '$addToSet' in '$addToSet' is not valid for storage: rmongodb 【发布时间】:2015-02-17 17:18:12 【问题描述】:我正在尝试为 R 中的刻度数据库编写通用 upsert。
python 代码是:
collection.update('symbol':'somesymbol', 'sha':'SoM3__W3|Re|7__Sh@',
'$set':segment:5,
'$addToSet': 'parent':parent_id,
upsert=True)
在 R 中,我正在使用 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|7__Sh@")
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
在segment级别显示,不正确。它应该显示在$set
的级别。这表明你的bson buffer
创建是错误的。
【参考方案1】:
我找不到不使用mongo.bson.from.list
的理由。它会为您拨打所有mongo.bson.buffer.*
电话。而且使用 bson 构造产生错误的机会要小得多。
query <- mongo.bson.from.list(list("symbol" = "somesymbol", "sha" = "SoM3__W3|Re|7__Sh@"))
upd_obj <- mongo.bson.from.list(list('$set' = list('segment' = 1:4), '$addToSet' = list('parent' = 'PARENT_ID')))
mongo.update(mongo = mongo, ns = "M__test.tmp", criteria = query, objNew = upd_obj, flags=mongo.update.upsert)
【讨论】:
以上是关于R:“$addToSet”中的字段“$addToSet”对于存储无效:rmongodb的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB聚合,如何在组管道中addToSet数组的每个元素
$addToSet 对象到 mongoose 中的数组 [重复]