6

これを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の使用法について、助けが必要です。

4

3 に答える 3

2

残念ながら、$gt2 つのフィールドを比較することはできません。

タイム クリティカルではないクエリに対してできることは、 ; を使用することです$where

> db.test.insert({home:5, away:3})
> db.test.insert({home:1, away:3})
> db.test.find({$where: 'this.home > this.away'})
{ "_id" : ObjectId("51ec576418fd21f745899945"), "home" : 5, "away" : 3 }

ただし、追加の「差分」フィールドを行オブジェクトに保存し、それを使用して検索すると、パフォーマンスが向上します$gt:0

> db.test.insert({home:5, away:3, diff:2})
> db.test.insert({home:1, away:3, diff:-2})
> db.test.find({diff: {$gt:0}}, {_id:1,home:1,away:1})
{ "_id" : ObjectId("51ee982a6e4b3b34421de7bc"), "home" : 5, "away" : 3 }
于 2013-07-23T13:16:20.930 に答える
1

これには通常のクエリを使用できませんが、心配する必要はありません。集計フレームワークが$cmp演算子に役立ちます: http://docs.mongodb.org/manual/reference/aggregation/cmp/

db.collection.aggregate({$project:{c: {$cmp:['$col1','$col2']}}},{$match:{c:{$gt:0}}})

ただし、これはインデックスにあまり適していないと言われ、現在は 16 メガの結果に制限されています。

編集

編集を考慮するには:

$mongo->collection->aggregate(array(
    array('$project'=>
        array(
            'c'=>array('$cmp'=>array('$col1','$col2'))
        )
    ),
    array('$match'=>array('c'=>array('$gt'=>0)))
))
于 2013-07-23T12:59:19.123 に答える