gpt4 book ai didi

mongodb - 蒙戈 : querying for values nested in child arrays where keys are variable

转载 作者:可可西里 更新时间:2023-11-01 10:34:48 25 4
gpt4 key购买 nike

我正在尝试构建一个 Mongo 查询,我可以在其中根据子数组中的值选择文档,其中嵌入数组的键会随着文档的不同而变化。

在下面的示例中,我们有三个文档数组。提取每种酒的名称是微不足道的。当我想选择品尝结果大于 20 的 Wine 时,问题就来了。问题是我在运行查询时不知道航类名称;它可以是任何东西。

因此,我不能只检查嵌入式数组的值。

我想过类似的事情

$ary_query = array('tasting_results.*' => '$gt: 20');

但显然通配符在 Mongo 中不起作用(至少不是那样)。有什么想法吗?

这是示例数组:

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
)
)

最佳答案

好吧,从技术上讲,您可以使用 $where 子句进行表扫描样式查询:

db.wines.find({$where: function() {
var keys = Object.keys(this.tasting_score);
keys.forEach(function(key) {
if(this.tasting_score[key] > 20) { return true; }
});
return false;
});

但是,我恳请您,这是一个糟糕的想法,最好以可使用标准查询方法的可索引方式将数据放入数据库中。你应该如何做取决于你的应用程序将如何操作数据,但至少你可以在插入时进行预处理并在你的对象中有一个 maxTastingScore 参数来查询是否这是唯一不适合您的数据结构的查询。

关于mongodb - 蒙戈 : querying for values nested in child arrays where keys are variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com