Агрегация с $ limit, $ match, $ ne возвращает больше документов, чем ожидалось - PullRequest
0 голосов
/ 21 марта 2019

У меня есть два набора vmdetails и rsc_installtion_status, я хочу выбрать документы из rsc_installtion_status, у которых нет совпадающего имени хоста в vmdetails

Я использовал следующий запрос

 db.rsc_installtion_status.aggregate([{$lookup:{ from: "vmdetails",let: {rschostname: "$hostname"},pipeline:[{$match:{$expr:{$ne :["$hostname","$$rschostname"]}}}],as: "rscInstall"}},{$unwind:"$rscInstall"},{$project:{"_id":0,"rscInstall":0}}])

количество записей в vmdetails

> db.vmdetails.find().count()
4

номер записи в

> db.rsc_installtion_status.find().count()
37

из 37 три документа совпадают с документами в vmdetails, поэтому я ожидаю, что результатом будет 34 документа, но в результате я получу 3 записи для каждого документа, т.е. 34X3

{ "hostname" : "string", "configdownload" : "string", "rscpkgdownload" : "string", "configextraction" : "string", "rscpkgextraction" : "string", "rscstartup" : "string", "installedversion" : "string", "_class" : "com.mastercard.rsc.domain.RscInstalltionStatus" }
{ "hostname" : "string", "configdownload" : "string", "rscpkgdownload" : "string", "configextraction" : "string", "rscpkgextraction" : "string", "rscstartup" : "string", "installedversion" : "string", "_class" : "com.mastercard.rsc.domain.RscInstalltionStatus" }
{ "hostname" : "string", "configdownload" : "string", "rscpkgdownload" : "string", "configextraction" : "string", "rscpkgextraction" : "string", "rscstartup" : "string", "installedversion" : "string", "_class" : "com.mastercard.rsc.domain.RscInstalltionStatus" }

но в $ match, если я использую $ eq вместо $ ne, результаты верны, выводятся только три записи. как выбрать записи, которые не совпадают с именем хоста

1 Ответ

0 голосов
/ 22 марта 2019
db.rsc_installtion_status.aggregate([ {$lookup : { from:"vmdetails", localField:"hostname", foreignField:"hostname" , as:"rscinstall" } }, { $match: { "rscinstall": { $eq: [] } } } ]) 

сценарий поиска является базовым, ниже приведен соответствующий сценарий, который решает $ eq, который проверяет, является ли массив пустым или нет, и возвращает документы, которые не являются общими в обеих коллекциях.если используется $ ne, то он вернет записи, которые совпадают в обеих коллекциях.

{ $match: { "rscinstall": { $eq: [] } } } ]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...