【问题标题】:How to get only specific fields from Mongodb document?如何从 Mongodb 文档中仅获取特定字段?
【发布时间】:2016-06-13 14:44:39
【问题描述】:

从 system.profile 集合中,我有这样的文件:

{
    "op" : "command",
    "ns" : "..",
    "command" : {
        "count" : "..",
        "query" : {
            "$and" : [ 
                ...
            ]
        }
    },
    "responseLength" : 48,
    "millis" : 18,
}

有些查询没有命令字段,而是有“查询”字段。我想检查“命令”字段是否存在。如果确实如此,则将其附加到我的 Stringbuilder 对象,如果不附加“查询”。

更新:
我曾尝试按照 Davide by 的建议使用 Projection,但我仍然没有找到检查查询是否存在的方法,如果确实存在,则追加该查询。

DBCollection collection = mongoTemplate.getCollection("system.profile");
DBObject query = new BasicDBObject("command", new BasicDBObject("$exists",true));
BasicDBObject fields = new BasicDBObject("command",1).append("millis", 1).append("ts", 1);
DBCursor cursor = collection.find(query, fields);
 while(cursor.hasNext()) {
    sb.append(cursor.next());
    sb.append(System.getProperty("line.separator"));
    }
return sb;

}

【问题讨论】:

    标签: java mongodb mongodb-query


    【解决方案1】:

    您需要使用以下method

    public DBCursor find(DBObject query, DBObject projection);
    

    来自java doc

    projection - 指定 MongoDB 将从结果集中的文档中返回哪些字段。

    【讨论】:

    • 题目的答案是正确的!
    • 我已尝试按照您的建议使用投影。你能看到我对我的问题的更新吗?唯一的问题是我能够获得特定的字段,但我不明白如何使它用于检查“查询”字段是否存在。如果“命令”存在,我所写的任何东西都会起作用。如果“查询”存在,则没有“命令”字段。
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 2018-09-04
    • 2021-07-22
    • 1970-01-01
    • 2020-09-20
    • 2021-07-04
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多