Ruby 西纳特拉可以';在进行MongoDB查询时,请不要将符号转换为整数
这是我关于torrent indexer的另一个MongoDB问题的后续部分 我正在制作一个开源的torrent索引器(本质上像一个迷你TPB),目前为后端提供SQLite和MongoDB 然而,我在MongoDB部分遇到了麻烦。在西纳特拉,当我试图上传洪流或搜索洪流时,我会感到不安 在上传的时候,你需要给torrent贴上标签,但是它在这里失败了。添加标记的代码如下所示:Ruby 西纳特拉可以';在进行MongoDB查询时,请不要将符号转换为整数,ruby,mongodb,sinatra,typeerror,Ruby,Mongodb,Sinatra,Typeerror,这是我关于torrent indexer的另一个MongoDB问题的后续部分 我正在制作一个开源的torrent索引器(本质上像一个迷你TPB),目前为后端提供SQLite和MongoDB 然而,我在MongoDB部分遇到了麻烦。在西纳特拉,当我试图上传洪流或搜索洪流时,我会感到不安 在上传的时候,你需要给torrent贴上标签,但是它在这里失败了。添加标记的代码如下所示: def add_tag(tag) if $sqlite unless tag_exists? tag
def add_tag(tag)
if $sqlite
unless tag_exists? tag
$db.execute("insert into #{$tag_table} values ( ? )", tag)
end
id = $db.execute("select oid from #{$tag_table} where tag = ?", tag)
return id[0]
elsif $mongo
unless tag_exists? tag
$tag.insert({:tag => tag})
end
return $tag.find({:tag => tag})[:_id] #this is the line it presumably crashes on
end
end
它到达第105行(如上所述),然后失败。发生什么事?此外,作为参考,随着解决方案的出现,这可能会变成一些其他问题
谢谢
编辑
因此,我没有返回带有[:\u id]
的标记结果,而是将elsif中的块更改为:
id = $tag.find({:tag => tag})
puts id.inspect
return id
但仍然会出现错误。您可以在上看到演示,在上看到源代码,我认为这里的问题是
[:\u id]
。我对Mongo不太了解,但是,`$tag.find({:tag=>tag})
可能是重新生成一个数组,并且没有定义将一个符号传递给[]数组操作符。我认为这里的问题是[:\u id]
。我对Mongo不太了解,但是,`$tag.find({:tag=>tag})
可能是重新生成一个数组,并将一个符号传递给[]数组操作符,但没有定义。鉴于您正在执行插入()
,获取id的最简单方法是:
id = $tag.insert({:tag => tag})
id
将是一个,因此您可以根据需要的返回值使用适当的方法:
return id # BSON::ObjectId('5017cace1d5710170b000001')
return id.to_s # "5017cace1d5710170b000001"
在你最初的问题中,你试图使用这个方法。这将返回一个,但您正试图将光标作为文档引用。您需要使用each
或next
在光标上迭代,例如:
cursor = $tag.find_one({:tag => tag})
return cursor.next['_id'];
如果需要单个文档,则应使用
例如,您可以使用以下方法查找并返回_id:
return $tag.find_one({:tag => tag})['_id']
鉴于您正在执行
insert()
,获取id的最简单方法是:
id = $tag.insert({:tag => tag})
id
将是一个,因此您可以根据需要的返回值使用适当的方法:
return id # BSON::ObjectId('5017cace1d5710170b000001')
return id.to_s # "5017cace1d5710170b000001"
在你最初的问题中,你试图使用这个方法。这将返回一个,但您正试图将光标作为文档引用。您需要使用each
或next
在光标上迭代,例如:
cursor = $tag.find_one({:tag => tag})
return cursor.next['_id'];
如果需要单个文档,则应使用
例如,您可以使用以下方法查找并返回_id:
return $tag.find_one({:tag => tag})['_id']
好的,现在我有:
id=$tag.find({:tag=>tag});放置id检查;返回id
但得到相同的错误它不可能是完全相同的错误。位置是[]
它现在说什么?看跌期权说什么?试着打印这个类。put
最后并没有放任何东西,现在我有了:id=$tag.find({:tag=>tag});放置id检查;返回id
但得到相同的错误它不可能是完全相同的错误。位置是[]
它现在说什么?看跌期权说什么?试着打印这个类。put
不会放任何东西。我可以将Mongo::Cursor更改为一个iterable数组吗?@tekknolagi:Mongo::Cursor已经是一个迭代器了。。因此,您可以使用或获取文档。例如:$tag.find({:tag=>tag})。。。结束
。我可以将Mongo::Cursor更改为iterable数组吗?@Teknolagi:Mongo::Cursor已经是迭代器了。。因此,您可以使用或获取文档。例如:$tag.find({:tag=>tag})。。。结束
。