2011-08-15 62 views
0

搜索我有一個看起來像這樣的查找文件通過數字索引列的值

{ 
    "_id":{ 
     "$oid":"4e3923963b123b59b73bde67" 
    }, 
    "ident":"terrainHome", 
    "columns":[ 
     [ 
     "4e3fbe57dccd1a0cc47509ab", 
     "4e3fbe57dccd1a0cc47509ac" 
     ], 
     [ 

     ] 
    ] 
} 

每個文檔可以有兩個或三列, 每列塊陣列記錄的集合,它們存儲在不同的集合中, 我想要一個將返回包含塊的文檔的標識的查詢。

我試圖

db.things.find({ columns[0] : "4e3fbe57dccd1a0cc47509ac" }); 

但這並沒有工作

我會繼續努力。 :)

+0

發現使用 ' 「$其中」 a溶液:未定義\ 「!(this.columns [0])= \ typeof運算」,」 && this.columns [0] .indexOf(\ 「4e48ed8245333bd40d000010 \」)= - 1「' 如果有人知道更好的方法? – chim

回答

0

這工作

db.things.find({"$where":"typeof(this.columns[0]) != \"undefined\" && this.columns[0].indexOf(\"4e48ed8245333bd40d000010\") != -1"}); 

我會接受我自己的答案在一兩天左右的時間,除非有人能提出一個簡單的解決方案。

另外這裏是兩個建議解決方案的mongo控制檯的屏幕截圖,但沒有奏效,(感謝花時間),以及我發現的複雜解決方案。屏幕截圖演示了集合中有文檔,兩個建議的查找命令以及$ where javascript解決方案,這些解決方案顯示這適用於數組中的第一項,數組中的第二項以及不匹配id的記錄。

the first two suggestions didn't work, but thanks anyway

我已經試過了幾十個建議的解決方案的變體,但他們都變成了空白的結果。

+0

示例json在原始問題中,請在提交答案之前檢查您的解決方案是否在mongo控制檯(或類似的)中工作。 – chim

0

如果你不關心WHERE與之匹配的是,儘量

db.things.find({'columns' : $in : ["4e3fbe57dccd1a0cc47509ac"] }); 
+0

謝謝@DrColossos,我試過 'db.blockSets.find({'columns':{$ in:[「4e3fbe57dccd1a0cc47509ac」]}});' 這不起作用,不會返回任何結果。 – chim

1

您在這裏混合類型(的ObjectId!=字符串)。您應該始終將事物保存爲ObjectId而不是字符串,就像您在數組中一樣。這可能不是問題的根源,但可能會在稍後出現問題。

在您例如,你可以這樣做:

db.things.find({ "columns.0" : "4e3fbe57dccd1a0cc47509ac" });

一般數組的數組可以是具有挑戰性的時候都更有條理(如嵌入式文檔)上查詢。

+0

感謝@Scott的回覆,以及對ObjectId的支持,luckilyl我仍然處於可以切換使用ObjectId而不是字符串代表的階段。 提供的代碼片段對我的情況沒有效果,它返回一個空白結果集。我會用我上面的解決方案回答這個問題,並且我會包含一個屏幕截圖和一些json來幫助其他人幫助我。 – chim