鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ mongo的or查詢(xún)

mongo的or查詢(xún)

關(guān)于mongodb的or查詢(xún)事項(xiàng),請(qǐng)教如下:
Sql的方式 a='x' and b='x' or ( c in (3,2) )
mongo表現(xiàn)出來(lái)的結(jié)果是先查詢(xún)了 c in(3,2) 再 進(jìn)行的相關(guān)過(guò)濾。
是我的寫(xiě)法有問(wèn)題,還是說(shuō)mongo本身不太支持呢

我現(xiàn)在的寫(xiě)法是:

db.getCollection('vip_gindex').find({
    'status': 1,
    $or: [{
        'id': {
            $in: [305898, 433975]
        }
    }]
})

結(jié)果就正兒八經(jīng)只查處了兩條出來(lái)

回答
編輯回答
空白格

db.getCollection('vip_gindex').find({'$or':[{'$and':[{'a':x},{'b':x}]},{'$and':[{'c':{'$in':[3,4]}}]}]})

2017年11月29日 10:45
編輯回答
憶往昔

你的寫(xiě)法的意思是:

status = 1 AND id IN (305898, 433975)

$or沒(méi)有什么實(shí)際意思,因?yàn)槭?code>$or后面數(shù)組里每個(gè)元素是一個(gè)條件,你只給了一個(gè)元素。
按你要的

a='x' AND b='x' OR ( c IN (3,2) )

應(yīng)該是:

    db.getCollection('vip_gindex').find({
        $or: [{
            a: 'x',
            b: 'x'
        }, {
            c: {
                $in: [3, 2]
            }
        }]
    });

樓上寫(xiě)法也沒(méi)錯(cuò)不過(guò)復(fù)雜了。

2017年12月10日 10:08