首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:'$addToSet‘中的字段’rmongodb‘对存储无效:rmongodb

R:'$addToSet‘中的字段’rmongodb‘对存储无效:rmongodb
EN

Stack Overflow用户
提问于 2015-02-18 01:18:13
回答 1查看 616关注 0票数 1

我正在尝试为R中的记号数据库编写一个通用的upsert。

python代码应该是:

代码语言:javascript
复制
collection.update({'symbol':'somesymbol', 'sha':'SoM3__W3|Re|7__Sh@'},

                   {'$set':{segment:5},

                    '$addToSet': {'parent':parent_id}}},

                     upsert=True)

在R中,我使用rmongodb并尝试构建BSON对象

代码语言:javascript
复制
#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)

当我运行这个命令时,我得到一个错误:

代码语言:javascript
复制
"The dollar ($) prefixed field '$addToSet' in '$addToSet' is not valid for storage."

查看qry_bsn:

代码语言:javascript
复制
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、append和finish对象时,查询运行正常。

任何关于如何做到这一点的帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-02-19 19:12:26

我找不到不使用mongo.bson.from.list的理由。它会为您发出所有mongo.bson.buffer.*调用。而且,使用bson结构产生bug的机会要小得多。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28567202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档