使用objectID对嵌套对象进行MongoDB java Driver查询无效

时间:2016-04-20 14:34:39

标签: java mongodb search nested-attributes

我有以下mongodb文档结构

{
    "_id": ObjectId("571530da41995a703faaf55b"),
    "project_name": "abc",
    "status": "new",
    "cluster": "",
    "sku": {
        "_id": "57152f7941995a703faaf559",
        "name": "temp",
        "distribution": "apache",
        "creation_date": "2016-04-18T19:02:46.595Z",
        "user_id": "570784b1682d25f45b64ed51",
        "__v": 0,
        "services": []
    }
}

我想找到一个给定sku._id的项目信息。我为此目的使用以下代码。

String  getProjectIDforSku(String skuID ) {
        ObjectId id = new ObjectId(skuID);
        BasicDBObject query = new BasicDBObject("sku", new BasicDBObject("_id", skuID));
        DBObject obj = getCollection("deployment", "projects").findOne(query);
        if (obj != null) {
            var jsonString = Json.parse(obj.toString());
            return jsonString;
        } else
            return null;
    }

当我调用此函数时,我收到null而不是有效的json字符串。 任何人都可以指导我错在哪里吗? 感谢

1 个答案:

答案 0 :(得分:1)

更改 BasicDBObject query = new BasicDBObject("sku", new BasicDBObject("_id", skuID));BasicDBObject query = new BasicDBObject("sku._id",skuID);

原因是在第一个中你将sku与只有一个字段_id的对象进行比较(不是这种情况,对象有其他字段),而第二个只匹配sku对象中的_id字段