在SQL中MongoDB for Minus set操作的等效操作是什么?

时间:2017-05-24 18:32:53

标签: mysql sql mongodb

我有以下MongoDB集合:

feb = [{
    "_id" : ObjectId("591df31cbbcd51d52653553c"),
    "patientId" : 2,
    "fullName" : "Lopez , Julia",
    "EVOLUCIÓN" : "Medicada"
}, ...]



may = [
    {"_id" : ObjectId("59231f3ab36e83e3db6e03f8"),
    "patientId" : 4,
    "fullName" : "Martinez , Carolina",
    "EVOLUCIÓN" : "15/08/97 : MEDICADA CON DERRUMAL A TERMINAR, TOMANIL GEL, ADAXIL AMP, ZOCOR 5, RENITEC 5, CERVILANE, Y AMLOC 5."
}, ...]

我需要通过MongoDB查询获取feb的投影 - 可能超过fullName 。 在SQL中将是:

SELECT fullName
FROM feb
MINUS
SELECT fullName
FROM may;

2 个答案:

答案 0 :(得分:2)

您无法在MongoDB中同时对多个馆藏进行查询。您必须在应用程序级别使用两个独立的查询来模拟MINUS

首先,你在五月得到名字:

namesInMay = db.may.distinct("fullName");

然后,您对二月做同样的事情,但使用$nin运算符过滤掉同样位于namesInMay的内容:

db.feb.distinct("fullName", { "fullName": { $nin: namesInMay }});

答案 1 :(得分:0)

尝试这样的事情...

db.address.aggregate([
{
  $replaceRoot: { 
    newRoot: { _id: "$_id", source: {$objectToArray: "$$ROOT"}}
  }
},
{
  $lookup: {
    from: "address1", 
    localField: "_id", 
    foreignField: "_id",  
    as: "target"
  }
},
{
  $replaceRoot: { 
    newRoot: { _id: "$_id", source: "$source", target : {$objectToArray: { $first : "$target"}}}
  }
},
{
  $replaceRoot: {
    newRoot: { _id: "$_id", source: { $setDifference: ["$source","$target"]}, target: { $setDifference: ["$target","$source"]}}
  }
}
]);

如果集合在同一个数据库中并且具有相同的“_id”,这将起作用。可以很容易地修改它以加入其他标准。

输出看起来像这样..

{ "_id" : ObjectId("5f8dc3abc6ff46000f023970"), "source" : [ { "k" : "postal_code", "v" : "" }, { "k" : "phone", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null }, { "k" : "phone", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023971"), "source" : [ { "k" : "postal_code", "v" : "" }, { "k" : "phone", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null }, { "k" : "phone", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023972"), "source" : [ { "k" : "postal_code", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023973"), "source" : [ { "k" : "postal_code", "v" : "" } ], "target" : [ { "k" : "postal_code", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023974"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023975"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023976"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023977"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023978"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023979"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397a"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397b"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397c"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397d"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397e"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f02397f"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023980"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023981"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023982"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
{ "_id" : ObjectId("5f8dc3abc6ff46000f023983"), "source" : [ { "k" : "address2", "v" : "" } ], "target" : [ { "k" : "address2", "v" : null } ] }
Type "it" for more