這是一個關係查詢,所以請記住,MongoDB不適合像SQL這樣的操作。這種類型的查詢通常會比在SQL數據庫中慢得多。我還會考慮這種類型的'元邏輯'壞設計,因爲兩個看似獨立的值匹配的事實不應該是任何意義。
這就是說,你仍然有兩個選擇。您可以使用基於JavaScript $where
:
db.coll.find({$and : [
{"type" : "S"},
{"$where": function() { return this.registration_token === this.username; } }]})
然而,這種方法是慢,因爲它需要火了JavaScript的每個對象發現(即所有那些具有type == 'S'
)。如果$where
中的任何數據來自最終用戶,它可能也會有安全隱患。
或者,你可以使用aggregation pipeline:
> db.coll.aggregate([{ "$project": {
"username": "$username",
"type": "$type",
"registration_token" : "$registration_token",
"match": { "$eq": ["$username","$registration_token"]} }},
{ "$match": { "match": true } } ])