MongoDB查询多个嵌套字段的公共字段

时间:2020-05-21 01:45:46

标签: mongodb

下面什么是最好的查询? 我花了很多时间来解决这个问题,但没有受到欢迎。

(我最好添加一些内容以使其清晰。我可以使用嵌套查询'fieldA.fieldB.fieldC':1,但是在我的数据中有许多'中间'字段。因此,我不想列出所有这些,现在我想知道是否可以将通配符用作'fieldA。*。fieldC':1。)

数据:

{'name':'A', 'top': { 'middle_1': { 'bottom_1':'sdf', 'bottom_2':'1263'}, 'middle_2': {'bottom_1':'ttt', 'bottom_2':'6565'}}}
{'name':'B', 'top': { 'middle_1': { 'bottom_1':'ghh', 'bottom_2':'4448'}, 'middle_2': {'bottom_1':'gdg', 'bottom_2':'4535'}}}
{'name':'C', 'top': { 'middle_1': { 'bottom_1':'dfh', 'bottom_2':'7717'}, 'middle_2': {'bottom_1':'hewr', 'bottom_2':'2435'}}}
{'name':'D', 'top': { 'middle_1': { 'bottom_1':'tyr', 'bottom_2':'1211'}, 'middle_2': {'bottom_1':'oho', 'bottom_2':'4644'}}}

结果:

{'name':'A', 'top': { 'middle_1': { 'bottom_2':'1263'}, 'middle_2': {'bottom_2':'6565'}}}
{'name':'B', 'top': { 'middle_1': { 'bottom_2':'4448'}, 'middle_2': {'bottom_2':'4535'}}}
{'name':'C', 'top': { 'middle_1': { 'bottom_2':'7717'}, 'middle_2': {'bottom_2':'2435'}}}
{'name':'D', 'top': { 'middle_1': { 'bottom_2':'1211'}, 'middle_2': {'bottom_2':'4644'}}}

谢谢!

1 个答案:

答案 0 :(得分:0)

排除项目find()中不需要的内容

db.yourCollection.find({},
{
  "top.middle_1.bottom_1": 0,
  "top.middle_2.bottom_1": 0
})

如果要使用聚合,

db.yourCOllection.aggregate([
    {
        $project: {
            "name": 1,
            "top.middle_1.bottom_1": 1,
            "top.middle_2.bottom_2": 1,
        }
    }
])

两者都是一样的。 0排除,1包括引用$project