使用upsert
时,我无法将new_data推送到数组中我如何使用upsert插入/更新一个文档?
history
是一个数组。
顺便说一句,gem mongo
的数据'似乎远不如Python
或Javascript
那么受欢迎。
gem mongo
的功能是否比其他语言少,并且有更多错误?
ArgumentError:参数个数错误(3个为1..2)
[64] pry(#<Scoot>)> @db.data_collection.find({_id: data[:_id]}).update_one(
[64] pry(#<Scoot>)* {data: data,
[64] pry(#<Scoot>)* from: from_city,
[64] pry(#<Scoot>)* },
[64] pry(#<Scoot>)* {:$push => { "history" => new_data }},
[64] pry(#<Scoot>)* :upsert => true,
[64] pry(#<Scoot>)* :safe => true
[64] pry(#<Scoot>)* )
ArgumentError: wrong number of arguments (3 for 1..2)
Mongo :: Error :: OperationFailure:'$ push'中的美元($)前缀字段'$ push'对存储无效。 (52)
@db.data_collection.find({_id: data[:_id]}).update_one(
{data: data,
from: from_city,
:$push => { "history" => new_data },
},
:upsert => true,
:safe => true
)
collection.find({_id: data[:_id]}).update_one(
{
"$set" => {
"city" => from_city
},
"$push": => { "history" => new_data }
},
:upsert => true
)
SyntaxError: unexpected tSTRING_DEND, expecting end-of-input
[105] pry(#<Scoot>)> :upsert => true
SyntaxError: unexpected =>, expecting end-of-input
:upsert => true
^
[105] pry(#<Scoot>)> )
SyntaxError: unexpected ')', expecting end-of-input
答案 0 :(得分:1)
假设您在此处使用2.X驱动程序系列。问题主要是不支持:$push
语法,所以你用不同的方式编写它。此外,:safe
在您阅读的任何地方都会被弃用。另外,如果要设置对象的特定字段,请使用"$set
:
@db.data_collection.find({ _id: data[:_id]}).update_one({
"$set" => {
"data" => data,
"city" => from_city
},
"$push" => { "history" => new_data }
},
:upsert => true
)
请参阅update_one