2016-10-05 57 views
0

使用$和匹配字段的多個值並使用$匹配$ in有什麼區別或優點?

db.collectionOne.aggregate([ 
{$match:{name:{'$in':['Jack','Jill']}, 
     city:{'$in':['LA','NY']} 
     } 
     }]) 

db.collectionOne.aggregate([ 
{$match:{ 
    $and:[{name:{'$in':['Jack','Jill']}, 
     city:{'$in':['LA','NY']} 
     } 
    ]} 
}]) 

或者應當美元,只能用於數值,以獲得更好的性能?

回答

0

首先,我認爲在您的示例中存在拼寫錯誤。它應該是

db.collectionOne.aggregate([ 
{$match:{ 
    $and:[{name:{'$in':['Jack','Jill']}}, 
     {city:{'$in':['LA','NY']} 
     } 
    ]} 
}]) 

而且兩者使用的片段是相同的提這個頁面上 https://docs.mongodb.com/manual/reference/operator/query/and/

MongoDB中指定一個逗號時提供了一種隱含AND運算 表達式的分隔列表。當在多個表達式中指定相同的字段或運算符必須是 時,對$和 運算符使用顯式AND是必要的。

所以使用$和當你需要在同一個鍵上應用兩個條件時,如下所示。

db.collectionOne.aggregate([ 
{$match:{ 
    $and:[{name:{'$in':['Jack','Jill','Bill','Kill']}}, 
     {name:{'$nin':['Matt','Bill']} 
     } 
    ]} 
}]) 

上面的例子是不好的,但它說明了情況

+0

沒有一個錯字,但同樣可以使用查詢兩種方式(礦井和URS)。但我確實明白,這不是一個好例子。無法使用'db.collectionOne.aggregate({'match':['Jack','Jill','Bill','Kill']}, name:{' $ nin':['Matt','Bill']} } }])'而不是使用$和。這兩個性能有什麼不同? – cartman619

+0

我說錯字,因爲$,目的是用來實現多種條件對單場,正如我在答覆中提到, 但是你用的方法是不正確的 db.collectionOne.aggregate([ {$比賽: {'name'{'$'in':['Jack','Jill','Bill','Kill']}, name:{'$ nin':['Matt','Bill ']} } ]} }]) –

+0

在提問之前,我確實經歷了相同的頁面,文檔使用$和布爾類型AND操作更有意義。但是我看到很多人使用$和替換$匹配,即使沒有布爾類型的操作來執行。 – cartman619