我正在嘗試構建一個Mongo查詢,我可以根據子數組中的值來選擇文檔,其中嵌入數組的鍵將從文檔更改爲文檔。Mongo:查詢嵌套在子數組中的鍵值可變的值
在下面的例子中,我們有三個文檔數組。拉起每個酒的名字是微不足道的。當我想選擇品嚐結果大於20的葡萄酒時,問題出現了。問題在於,當我運行查詢時,我不知道航班的名稱;它可以是任何東西。
因此,我不能僅僅檢查嵌入數組的值。
我想過像
$ary_query = array('tasting_results.*' => '$gt: 20');
但顯然通配符不蒙戈工作(至少不是這樣的)。有任何想法嗎?
這裏的例子數組:
ary_wines = array(
"name" => "Ripple",
"year" => "2013",
"style" => "cabernet",
"size" => "750ml",
"tasting_results" => array (
"flight_42" => 12,
"flight_2" => 18,
"flight_33" => 7
)
)
ary_wines = array(
"name" => "Riunite",
"year" => "2012",
"style" => "White Zinfandel",
"size" => "1.5L",
"tasting_score" => array (
"flight_6" => 14,
"flight_54" => 21,
"flight_98" => 3
)
)
ary_wines = array(
"name" => "Maneschewitz",
"year" => "2012",
"style" => "Grape Juice",
"size" => "500ml",
"tasting_score" => array (
"flight_7" => 12,
"flight_41" => 26,
"flight_9" => 3
)
)
感謝大衛,是啊,我在想什麼像這樣,但隨後丟棄它,因爲它似乎不能很好地擴展。所以,我想我需要改變我構建文檔的方式,基本上就是你所說的。 – DenverMatt 2012-03-28 01:15:02
是的,如果您可以找到正確的文檔結構,MongoDB可以提高性能。如果沒有一個好的結構,那麼使用PostgreSQL或者在Neo4j的另一端更合理。但經過一番思考後,也許你可以用一個結構來做到這一點:''tasting_score:[{flight_num:7,score:20},{flight_num:18,score:7},...]''。然後你可以''db.wines.find({「tasting_score.score」:{$ gt:20}})''。當然,這取決於你打算做什麼其他查詢。 – 2012-03-28 05:43:22