mongodb查询,如何只查询出某一个字段的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb查询,如何只查询出某一个字段的值?相关的知识,希望对你有一定的参考价值。

呃,我还是问怎么删除重复记录好了。。。

将相同字段的值加在一起需要用sum函数。

如emp表中有如下数据:

现要按deptno为分组,将sal的值加在一起,可用如下语句:

select deptno,sum(sal) sal from emp group by deptno;

查询结果:

参考技术A db.xxx.find(,"[要查询的字段]":1)追问

有没有办法只查出一个字段的值?这样查ID的值也会查出来。

追答

没有办法,ID字段是必须查出来的。

追问

嗯。。。那也谢谢你了

本回答被提问者采纳
参考技术B db.xxx.find(,"[要查询的字段]":1,"[不查询的字段]":0)

mongodb 通过查询字段只返回子文档

【中文标题】mongodb 通过查询字段只返回子文档【英文标题】:mongodb return just the subdocument by querying the field 【发布时间】:2018-12-14 06:52:22 【问题描述】:

我有这样的结构:


"_id" : ObjectId("5b155aa3e7179a6034c6dd5b"),
"pinnedKpi" : 
    "Ver01" : [
        "130",
        "138",
        "122",
        "134"
    ],
    "Ver02" : [
        "265",
        "263",
        "142",
        "264"
    ],
    "Ver03" : [ ],
    "Ver04" : [
        "126",
        "134",
        "122",
        "138"
    ]
,
"email" : "john@doe.ca",

是否可以进行查询,例如仅返回 email = john@doe.ca 和 pinnedKpi.Ver01 的数组 ---> ["130","138","122","134"]

【问题讨论】:

您希望查询返回的具体内容是什么? 上面贴的数组 我想说返回“email”的数组:“john@doe.ca”,pinnkedKpi 是ver01 【参考方案1】:

就用这个吧:

db.collection.find( // find all documents
    "email": "john@doe.ca" // where the "email" field equals some value
, 
    "_id": 0, // do not return the "_id" field (included by default)
    "pinnedKpi.Ver01": 1 // only return the "pinnedKpi.Ver01" field
)

【讨论】:

这里的1是什么意思-->"pinnedKpi.Ver01": 1 查询的第二部分("_id": 0,"pinnedKpi.Ver01": 1)代表投影指令。 0 可以为假,1 可以为真。这里排除了默认包含的“_id”,并在投影中手动包含了pinnedKpi.Ver01。 在同一个例子中,如果我像pinnedKpi.Ver0$version 一样向它传递一个变量,它不起作用,即使它控制台记录相同的字符串,就像我硬编码它一样 请您尝试一下,以便我们看看出了什么问题。另外,请告诉我们您使用的语言/客户端。【参考方案2】:

如果数组不需要是响应的根元素,您可以使用以下查询返回 pinnedKpi.Ver01 数组,其中包含电子邮件条件以及 pinnedKpi 数组中存在 Ver01 元素:

    db.test1.find(
      "email" : "john@doe.ca", "pinnedKpi.Ver01" : "$exists" : true,
    "pinnedKpi.Ver01" : 1
    );

哪个输出:

 
    "_id" : ObjectId("5b155aa3e7179a6034c6dd5b"), 
    "pinnedKpi" : 
        "Ver01" : [
            "130", 
            "138", 
            "122", 
            "134"
        ]
    

如果数组结果需要作为根元素,可以使用聚合框架来实现:

db.test1.aggregate(
    [
        
            $match: email:"john@doe.ca","pinnedKpi.Ver01":$exists:true
        ,
        
            $replaceRoot: 
            newRoot: "$pinnedKpi"
            
        ,
        
            $project: 
               Ver01:1
            
        ,
    ]
);

输出:

 
    "Ver01" : [
        "130", 
        "138", 
        "122", 
        "134"
    ]

【讨论】:

在你上面的同一个例子中,如果我将一个变量传递给它,比如 pinnedKpi.Ver0$version 它不起作用,即使它控制台记录相同的字符串,就像我硬编码它一样..如何传递变量

以上是关于mongodb查询,如何只查询出某一个字段的值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何查询出某一列中不同值出现的次数?

求助啊,tp下,mongodb如何查询后只返回某个字段值

SQL 怎样将查询出某列的多行数据,变为一行显示? 通过SQL语句查询出结果 AutoID cT

mongodb 在查询期间如何处理文档

怎么一次查询出某一字段相同的全部数据

Mongodb模糊查询返回有查询到内容的字段?