1
我目前在mongodb中存儲一系列推文,其中的模式直接映射到由流API返回的json。用mongoid(或替代)查詢嵌套嵌入式文檔
該模式非常冗長,嵌入文檔很多,例如嵌套。
{
"_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"
}
有時網址嵌入將是空的,而其他時候,它將包含一個以上的值(在進一步的陣列狀嵌套[0],[1] [n])的
我想從這個json文檔中提取鏈接值。
我有,我已經定義了一個鳴叫模型,並使用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?此刻我的查詢只是返回完整的文檔。
感謝shingara - 我在想一個方法TI檢查如果URL存在與否可能是要走的路。目前在我的應用程序中 - 我剛剛定義了一個Tweet類。我沒有定義實體類 - 我正在使用mongoid的動態字段來訪問實體嵌入 - 我剛剛嘗試了你的代碼,它沒有選擇任何網址 - 我想我可能需要定義和實體類/模型現在 - 抱歉,如果我缺乏紅寶石體驗是一個因素! – 2012-03-05 10:35:08
你可以在沒有實體模型的情況下做同樣的事情,你可以通過例子在'url'鍵上以空值返回一個Hash。這只是返回一個值與有效的鴨子打字。有一些「更自信的代碼」,請參閱@avid對此的評論。 – shingara 2012-03-05 11:12:07
歡呼shingara - 這是非常有益的。我已經接受你的答案。我還設法更好地理解數據如何通過mongoid從mongo返回到ruby,並能夠通過 – 2012-03-05 11:35:09