【问题标题】:How to get values of inner document attribute in mongoDB?如何在 mongoDB 中获取内部文档属性的值?
【发布时间】:2010-11-24 05:26:02
【问题描述】:

我是 mongoDB 的新手。我在网络应用程序中使用 mongoDB。

我想知道如何获取文档内部文档属性的值。

假设我的 JSON 是这样的,

{ "_id" : { "$oid" : "4ceb753a70fdf877ef5113ca"}, "Attrr1" : "value1", "Attr2": {"innerAttr1":"innerValue1", "innerAttr2":"innerValue2"}, "Attr3" : { "innerAttr3" : "innerValue3", "innerAttr4" : "innerValue4"} }

对于上面的json,我怎样才能得到innerValue1innerValue1innerValue2

我试过了,但它不适合我!!!

BasicDBObject innerQuery = new BasicDBObject();
field.put("Attr2.innerAttr1", 1);

任何建议都将不胜感激!!!

谢谢

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    我不明白你。您需要在某个文档中获取值或设置或添加到集合中吗?

    据我了解,您在 java 中使用了一些用于 mongo db 的驱动程序。我对 java 的 mongo 驱动程序没有经验。但我知道如何在驱动程序或 c# 中执行此操作:

    在 c# mongo 驱动程序中更新集合中的内部属性,您需要执行以下操作:

    var query = Query.Eq("_id", documentId);
    var update = Update.Set("Attr2.innerAttr1",1);
    
    MongoDb.Database.GetCollection("collectionName").Update(query, update);
    

    如果从上述代码查询返回一个文档 - Attr2 集合中的 innerAttr1 属性将被更新。如果我知道该查询返回多个文档并且我需要更新多个文档,我会使用这样的代码:

    MongoDb.Database.GetCollection("collectionName").Update(query, update, UpdateFlag.Multi);
    

    我相信 java 的 mongo 驱动程序中的逻辑相同。

    希望对您有所帮助。

    【讨论】:

    • 感谢您的回答。 Java 驱动程序不支持点表示法。这就是我的问题。但我找到了另一种方法。但我感谢你为我付出的努力。
    【解决方案2】:

    由于没有发布答案,我刚刚找到答案,这里是

    (BasicDBObject)(query.get("Attr2")).getString("InnerAttr1") 
    where query = (BasicDBObject) cursor.next()
    

    归功于 stackoverflow 上的另一篇文章。

    【讨论】:

    • 如果有指向 SO 上其他帖子的链接,您可能应该将其包含在您的答案中。
    • 我试图找到它但找不到。当我这样做时,我会包含它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多