【问题标题】:R: field '$addToSet' in '$addToSet' is not valid for storage: rmongodbR:“$addToSet”中的字段“$addToSet”对于存储无效: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创建是错误的。

标签: r mongodb rmongodb


【解决方案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)

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多