MongoDB:匹配后仅检索文档的某些属性

发布于 2025-02-13 16:27:04 字数 1729 浏览 1 评论 0原文

我有一个名为books的mongodb集合。

文档的一个示例是:

{
    "_id" : ObjectId("62bf10951fecaed4dba275b1"),
    "name" : "Library 1",
    "positions" : [ 
        {
            "number" : 2,
            "nodes" : [ 
                {
                    "number" : 2,
                    "bookId" : "6254674d3711f90bd8e76036"
                }, 
                {
                    "number" : 1,
                    "bookId" : "621e9b5aa7951d0be4516c18"
                }
            ]
        }, 
        {
            "number" : 1,
            "nodes" : [ 
                {
                    "number" : 1,
                    "bookId" : "6254674d3711f90bd8e76037"
                }, 
                {
                    "number" : 3,
                    "bookId" : "6254674d3711f90bd8e76039"
                }, 
                {
                    "number" : 2,
                    "bookId" : "6254674d3711f90bd8e76035"
                }
            ]
        }
    ]
}

我需要运行一个查询,该查询基于书ID,返回namepositions.number位置。 node.number

例如,如果我搜索ID 6254674D3711F90BD8E76035,它应该返回:

{
    _id: ObjectId("62bf10951fecaed4dba275b1"),
    name: "Library 1",
    positions: {
        number: 1,
        nodes: {
            number: 2
        }
    }
}

到目前为止,这就是我提出的:

db.getCollection('books').aggregate([
    { $match: { "positions.nodes.bookId": "6254674d3711f90bd8e76035" } },
    { $project: { name: 1, "positions.number": 1, "positions.nodes.number": 1 } }
])

不幸的是,这将返回每个节点。我可能需要一些说: “选择名称,位置。名称,位置。nodes.numberbookid = 6254674d3711f90bd8e76035”

任何帮助都将不胜感激。

谢谢

I have a MongoDB collection called books.

An example of a document is:

{
    "_id" : ObjectId("62bf10951fecaed4dba275b1"),
    "name" : "Library 1",
    "positions" : [ 
        {
            "number" : 2,
            "nodes" : [ 
                {
                    "number" : 2,
                    "bookId" : "6254674d3711f90bd8e76036"
                }, 
                {
                    "number" : 1,
                    "bookId" : "621e9b5aa7951d0be4516c18"
                }
            ]
        }, 
        {
            "number" : 1,
            "nodes" : [ 
                {
                    "number" : 1,
                    "bookId" : "6254674d3711f90bd8e76037"
                }, 
                {
                    "number" : 3,
                    "bookId" : "6254674d3711f90bd8e76039"
                }, 
                {
                    "number" : 2,
                    "bookId" : "6254674d3711f90bd8e76035"
                }
            ]
        }
    ]
}

I need to run a query that, based on a book ID, returns the name, the positions.number and the positions.node.number.

For example, if I search for the ID 6254674d3711f90bd8e76035, it should return:

{
    _id: ObjectId("62bf10951fecaed4dba275b1"),
    name: "Library 1",
    positions: {
        number: 1,
        nodes: {
            number: 2
        }
    }
}

So far, this is what I came out with:

db.getCollection('books').aggregate([
    { $match: { "positions.nodes.bookId": "6254674d3711f90bd8e76035" } },
    { $project: { name: 1, "positions.number": 1, "positions.nodes.number": 1 } }
])

Unfortunately, this returns every single node. I might need something that says:
"Select name, position.number, position.nodes.number where bookId = 6254674d3711f90bd8e76035"

Any help is appreciated.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

攒一口袋星星 2025-02-20 16:27:04

解决:

db.getCollection('books').aggregate([
{
    $match: {"positions.nodes.books": "6254674d3711f90bd8e76035"}
},
{
    $unwind: "$positions"
},
{
    $unwind: "$positions.nodes"
},
{
    $match: {"positions.nodes.books": "6254674d3711f90bd8e76035"}
},
])

Solved:

db.getCollection('books').aggregate([
{
    $match: {"positions.nodes.books": "6254674d3711f90bd8e76035"}
},
{
    $unwind: "$positions"
},
{
    $unwind: "$positions.nodes"
},
{
    $match: {"positions.nodes.books": "6254674d3711f90bd8e76035"}
},
])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文