【问题标题】:Find a mongo subcollection by id通过 id 查找 mongo 子集合
【发布时间】:2017-05-31 16:56:24
【问题描述】:

我需要有关此查询的帮助。如何找到子集合?

收集客户

db.clientes.find({
    _id: ObjectId("587cc2d8704ae610d3741e6b")
}); {
    "_id": ObjectId("587cc2d8704ae610d3741e6b"),
    "razonSocial": "CREXELL",
    "cuit": "20-12121212-0",
    "vsat": [{
        "CPA": 8682,
        "IP": "149.126.35.61"
    }, {
        "CPA": 5500,
        "IP": "149.126.36.109",
        "_id": ObjectId("587cdb2af073f02a251361e8")
    }, {
        "CPA": 1234,
        "IP": "1902312",
        "_id": ObjectId("587d05fb930d504018ef8e01")
    }],
    "__v": 7
}

我需要得到类似的东西:

{
            "CPA": 5500,
            "IP": "149.126.36.109",
            "_id": ObjectId("587cdb2af073f02a251361e8")
        }

谢谢 :D

【问题讨论】:

    标签: angularjs node.js mongodb mongoose mean-stack


    【解决方案1】:

    您可以使用聚合来实现这一点,但您还需要知道您要在子文档数组中查找的 _id。

    db.clientes.aggregate([
        // Find the document matching the _id only
        { $match: { "_id": ObjectId("587cc2d8704ae610d3741e6b") } },
        // Split all vsat array elements into separate documents
        { $unwind: "$vsat" },
        // Match only the case where the _id matches 587cdb2af073f02a251361e8
        { $match: { "vsat._id": ObjectId("587cdb2af073f02a251361e8") } },
        // Choose the elements we wish to return
        { $project: { "vsat": 1, "_id": 0 } }
    ])
    

    结果:

    { 
        "vsat" : { 
            "CPA" : 5500, 
            "IP" : "149.126.36.109", 
            "_id" : ObjectId("587cdb2af073f02a251361e8") 
        } 
    }
    

    【讨论】:

    • 感谢您的回复!此查询为我返回 empy db.clientes.aggregate([{ $match: { "_id": ObjectId("587cc2d8704ae610d3741e6b") } },{ $unwind: "$vsat" },{ $match: { "vsat._id": ObjectId("587cdb2af073f02a251361e8") } },{ $project: { "vsat": 1, "_id": 0 } } ]) ; >
    • 尝试一次添加一个管道的每个阶段。首先这个: db.clientes.aggregate([ { $match: { "_id": ObjectId("587cc2d8704ae610d3741e6b") } } ]) 然后这个: db.clientes.aggregate([ { $match: { "_id": ObjectId( "587cc2d8704ae610d3741e6b") } }, { $unwind: "$vsat" } ]) 等等...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2018-05-04
    • 1970-01-01
    • 2012-06-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多