2016-07-28 43 views
2

我的transactions集合中包含以下文檔。

{txnId: 1, amount: 200, tags:["monthly", "recharge"]}, 
{txnId: 2, amount: 4000, tags:["monthly", "salary"]}, 
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]}, 
{txnId: 4, amount: 400, tags:["monthly", "electricity"]}, 
{txnId: 5, amount: 300, tags:["dinner", "daily"]} 

我想獲取所有這些都具有但不工資的文件

某些查詢我試圖和它們各自的輸出:

查詢1:

db.transactions.find({tags: {$elemMatch: {$in: ["monthly"], $nin: ["salary"]}}}) 

輸出1:

{txnId: 1, amount: 200, tags:["monthly", "recharge"]} 
{txnId: 2, amount: 4000, tags:["monthly", "salary"]} 
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]} 
{txnId: 4, amount: 400, tags:["monthly", "electricity"]} 

問題2:

db.transactions.find({tags: {$nin: ["salary"]}}) 

輸出2:

{txnId: 1, amount: 200, tags:["monthly", "recharge"]} 
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]} 
{txnId: 4, amount: 400, tags:["monthly", "electricity"]} 
{txnId: 5, amount: 300, tags:["dinner", "daily"]} 

問題3:

db.transactions.find({tags: {$nin: ["salary"]}, tags: {$elemMatch: {$in: ["monthly"]}}}) 

輸出3:

{txnId: 1, amount: 200, tags:["monthly", "recharge"]} 
{txnId: 2, amount: 4000, tags:["monthly", "salary"]} 
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]} 
{txnId: 4, amount: 400, tags:["monthly", "electricity"]} 

爲什麼$在$萬年沒有一起工作,甚至$萬年無法按預期工作?還是我誤解了?

+2

我太想你的查詢,仍然沒有能夠證明如何'$ nin'和'$ in'一起工作。但下面的查詢幫助我實現了預期的結果'db.test.find({「$ and」:[{tags:「monthly」},{tags:{$ ne:「salary」}}]})' – Nattyk

+0

讓我知道如果上述查詢現在可以幫助你。無論如何,$ nin和$ in在一起的工作仍然是開放的! – Nattyk

回答

1

您也可以一起使用$ nin & $。下面的查詢將給出預期的記錄。希望不需要使用$ elemMatch。

db.transactions.find({$and:[{tags:{$in:['monthly']}}, {tags:{$nin:['salary']}}]}).toArray() 

輸出:

[ 
{txnId: 1, amount: 200, tags:["monthly", "recharge"]}, 
{txnId: 3, amount: 1000, tags:["monthly", "waterbill"]}, 
{txnId: 4, amount: 400, tags:["monthly", "electricity"]} 
]