gpt4 book ai didi

php - MongoDB(第一列大于第二列?)(php)

转载 作者:IT老高 更新时间:2023-10-28 13:27:12 25 4
gpt4 key购买 nike

我会用mysql查询来解释这个。

select * from stock where home>away

home away
1 3
2 1
1 0
4 5

我只想用 mongodb 做同样的查询。但我做不到。

array('column' => array('$gt' => what should I write here?))

我需要一些关于 PHP 使用的帮助。

最佳答案

您不能直接使用 MongoDB 查询来执行此操作。 MongoDB 中的查询只允许与静态值进行比较。但是,有几个选项。

首先,您可以在更新每个字段中的值时存储比较结果,例如,您可以将其存储为:

home away  gt
1 3 0
2 1 1
1 0 1
4 5 0

这是最简单的解决方案,并且具有额外的好处,您可以在 gt 上设置索引。当然,更新值确实意味着更多的开销。进行这种预计算与反规范化非常相似。为了充分利用系统,您经常需要在 NoSQL 数据库中进行非规范化。

有一个替代方法,但它不允许您对 > 进行索引搜索。您可以通过以下方式使用聚合框架:

db.so.aggregate( [
{ $project: {
'away' : 1,
'home': 1,
'better_at_home': { $cmp: [ '$home', '$away' ] }
} },
{ $match: { 'better_at_home': { $gt: 0 } } }
] );

第一步,我们使用$cmp来比较homeaway。在第二步($match)中,我们过滤掉所有差值小于等于0的文档。

聚合的答案是:

{
"result" : [
{
"_id" : ObjectId("51ee7cfb812db9ff4412f12f"),
"home" : 2,
"away" : 1,
"better_at_home" : 1
},
{
"_id" : ObjectId("51ee7cff812db9ff4412f130"),
"home" : 1,
"away" : 0,
"better_at_home" : 1
}
],
"ok" : 1
}

关于php - MongoDB(第一列大于第二列?)(php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810654/

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