Ruby 使用mongoid(或备选方案)查询嵌套的嵌入文档
我目前将一系列tweet作为文档存储在mongodb中,其模式直接映射到流API返回的json 模式非常冗长,有许多嵌套的嵌入式文档,例如Ruby 使用mongoid(或备选方案)查询嵌套的嵌入文档,ruby,mongodb,sinatra,mongoid,Ruby,Mongodb,Sinatra,Mongoid,我目前将一系列tweet作为文档存储在mongodb中,其模式直接映射到流API返回的json 模式非常冗长,有许多嵌套的嵌入式文档,例如 { "_id": ObjectId("4f547c17e948fb6e2e00197d"), "key: value", "...", "...", "entities": { "urls": [ { "indices": [ 58, 78 ],
{
"_id": ObjectId("4f547c17e948fb6e2e00197d"),
"key: value",
"...",
"...",
"entities": {
"urls": [
{
"indices": [
58,
78
],
"display_url": "bit.ly\/yJwQsm",
"url": "http:\/\/t.co\/x5ccL6So",
"expanded_url": "http:\/\/bit.ly\/yJwQsm"
}
],
}
"other parent key pair values here"
}
有时嵌入的URL将为空,而有时它将包含多个值(在另一个数组中,如嵌套[0]、[1][n])
我想从这个json文档中提取链接值
我有一个简单的Sinatra应用程序,其中我定义了一个Tweets模型,并使用mongoid的动态属性,我能够快速输出文档中的值,如下所示:
<% @tweets.each do |tweet| %>
<li><%= tweet._id %></li>
<li><%= tweet.user.screen_name %></li>
<li><%= tweet.entities %></li>
当我尝试输出一个值时,如
<li><%= tweet.entities.urls %></li>
我开始看到方法不存在的错误。对其自身的“tweet.entities”调用将返回嵌套嵌入的内容。有没有人对我如何检查孩子的存在有什么想法,这样我就可以进入它?我想用mongoid做的事可能吗?目前我的查询只返回完整文档。在您的情况下,最好的方法是重写
entites
方法,以便在没有实体
键的情况下返回空的实体
模型。或者,您可以创建一个新方法eentities\u url
执行检查是否存在url的工作,如果存在url,则返回值
class Tweet
def entities
super || Entity.new
end
def entities_url
entities.respond_to?(:url) ? entities.url : ''
end
end
如果没有
实体
键,则最好重写实体
方法以返回空的实体
模型。或者,您可以创建一个新方法eentities\u url
执行检查是否存在url的工作,如果存在url,则返回值
class Tweet
def entities
super || Entity.new
end
def entities_url
entities.respond_to?(:url) ? entities.url : ''
end
end
谢谢shingara-我在想一种检查url是否存在的方法可能是可行的。目前在我的应用程序中,我刚刚定义了一个Tweet类。我还没有定义实体类-我正在使用mongoid的动态字段访问嵌入的实体-我刚刚尝试了你的代码,但没有找到任何URL-我想我现在可能需要定义和实体类/模型-如果我缺乏ruby经验是一个因素,我很抱歉!您可以在没有实体模型的情况下执行相同的操作,您可以通过示例返回一个在“url”键上具有空值的哈希值。它只是返回一个带有有效duck类型的值。要获得一些“更自信的代码”,请参阅@avid讨论。干杯,辛加拉-这非常有用。我接受了你的回答。我还设法更好地理解了数据是如何通过mongoid从mongo返回到ruby的,并且能够深入到嵌入中……感谢shingara——我在想一种检查url是否存在的方法可能是可行的。目前在我的应用程序中,我刚刚定义了一个Tweet类。我还没有定义实体类-我正在使用mongoid的动态字段访问嵌入的实体-我刚刚尝试了你的代码,但没有找到任何URL-我想我现在可能需要定义和实体类/模型-如果我缺乏ruby经验是一个因素,我很抱歉!您可以在没有实体模型的情况下执行相同的操作,您可以通过示例返回一个在“url”键上具有空值的哈希值。它只是返回一个带有有效duck类型的值。要获得一些“更自信的代码”,请参阅@avid讨论。干杯,辛加拉-这非常有用。我接受了你的回答。我还设法更好地理解了数据是如何通过mongoid从mongo返回到ruby的,并且能够通过…深入到嵌入式