Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排除MongoDB中嵌入文档的所有字段,但不包括单个字段_Mongodb - Fatal编程技术网

排除MongoDB中嵌入文档的所有字段,但不包括单个字段

排除MongoDB中嵌入文档的所有字段,但不包括单个字段,mongodb,Mongodb,考虑以下文件: { "_id": 1, "name" : "bob", "alotofstuff": [], "morestuff", "item": { "name": "baumeister", "manyfieldshere": 1, "evenmore": 2 } } 是否有一种方法可以返回文档,除了名称字段外,不包含项的所有属性,如下所示: { "_id": 1, "nam

考虑以下文件:

{
    "_id": 1,
    "name" : "bob",
    "alotofstuff": [],
    "morestuff",
    "item": {
        "name": "baumeister",
        "manyfieldshere": 1,
        "evenmore": 2
    }
}
是否有一种方法可以返回文档,除了
名称
字段外,不包含
的所有属性,如下所示:

{
    "_id": 1,
    "name" : "bob",
    "alotofstuff": [],
    "morestuff",
    "item": {
        "name": "baumeister",
    }
}

我想避免编写一个投影,它必须包括所有其他字段
{name:1,alotofstuff:1,morestuff:1,item.name:1}
(实际文档要大得多)。

投影是唯一的解决方案,如果您不希望DB引擎返回其他键的话


对不起

如果您不希望DB引擎返回其他键,则投影是唯一的解决方案

对不起

如果您可以使用,这里有一个解决方法,可以满足您的要求,使用和:

这是一个简单的过程,创建一个临时
item\u name
属性,删除
item
属性,从临时
item\u name
中添加
item.name
属性,然后最后删除
item\u name
临时属性

我不能说这是一个干净的解决方案,但它是实用的——我希望它能有所帮助。如果您想先过滤文档(我想您可以这样做),可以添加一个阶段作为第一个管道阶段。

如果您可以使用,下面是一个解决方法,它将满足您的要求,使用和:

这是一个简单的过程,创建一个临时
item\u name
属性,删除
item
属性,从临时
item\u name
中添加
item.name
属性,然后最后删除
item\u name
临时属性


我不能说这是一个干净的解决方案,但它是实用的——我希望它能有所帮助。如果您想先过滤文档,可以添加一个stage作为第一个pipeline stage(我想您会这样做)。

说清楚一点,我不想避免编写投影。我想避免写一个非常复杂的投影。我在问是否有一种聪明的方法可以做到这一点。我只是想说清楚,我不想避免写投影。我想避免写一个非常复杂的投影。我在问是否有一种聪明的方法可以做到这一点。为什么不排除这些属性呢?它们的数量也很大吗?@UsmanRana是的,甚至还有不同种类的物品。你为什么不排除这些属性?它们的数量也很大吗?@UsmanRana是的,甚至还有不同种类的项目。对于像我这样的懒人来说,这是addFields和project的一个很好的用途。谢谢对于像我这样的懒人来说,这是addFields和project的一个很好的用途。谢谢
db.your_collection.aggregate([
    { $addFields: { "item_name": "$item.name" } },
    { $project: { item: 0 } },
    { $addFields: { "item.name": "$item_name" } },
    { $project: { item_name: 0 } }
])