sql子查询到mongodb

时间:2017-10-09 12:51:05

标签: mysql sql mongodb

我是MongoDB的新手,我正在尝试将SQL查询转换为MongoDB查询。但似乎无法找到任何方法将带有子查询的SQL查询转换为mongoDB。 例如:

SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);

我尝试了以下方法,但它似乎无法运作。

db.shop.group({
"initial": {},
"reduce": function(obj, prev) {
    prev.maximumvalueprice = isNaN(prev.maximumvalueprice) ? obj.price : 
    Math.max(prev.maximumvalueprice, obj.price);
}}).forEach(
function(data){
    db.shop.find({
         "price": data
         }, 
        {
            "article": 1,
            "dealer": 1,
            "price": 1
        })
})

如何将此SQL查询转换为MongoDB查询?

2 个答案:

答案 0 :(得分:0)

如果您使用的是MongoDB v.3.2或更新版本,则可以尝试使用TypeError: 'Word2Vec' object does not support item assignment

尝试使用聚合:

  • $sort$lookup;
  • 的价格收集您的收款
  • $limit设为1(这将是第一份文件,价格最高);
  • 然后使用$lookup按最高价格从同一集合中选择文档,并将其设置为DESC元素;
  • $unwind tmpCollection;
  • $replaceRoot - 将文档根目录更改为tmpCollection

示例:

$tmpCollection

答案 1 :(得分:0)

在订购文档的 $first 管道阶段中,您似乎需要使用 $group 来完成此任务的聚合框架。订购集合中文档的初始管道步骤是 $sort

db.shop.aggregate([
    { "$sort": { "price": -1 } }, // <-- sort the documents first in descending order
    {
        "$group": {
            "_id": null,
            "article": { "$first": "$article" }, 
            "dealer": { "$first": "$dealer" },
            "price": { "$first": "$price" }
        }
    }
])

或使用 $last

db.shop.aggregate([
    { "$sort": { "price": 1 } }, // <-- note the sort direction
    {
        "$group": {
            "_id": null,
            "article": { "$last": "$article" },
            "dealer": { "$last": "$dealer" },
            "price": { "$last": "$price" }
        }
    }
])