sql >> データベース >  >> NoSQL >> MongoDB

ネストされた配列からプルして、MongoTemplateを使用して戻りサブドキュメントをクエリすることができません

    (1)更新(プル)reply 配列要素:

    このコードはドキュメントを更新します。つまり、replyから特定の要素(サブドキュメント)を削除します 配列:

    // Query criteria for topic and reply
    String topicId = "5e5e4d4bb431502946c15342";
    String topicReplyId = "07a0293a-22a1-45fb-9aa2-775fa24e9915";
    
    MongoOperations mongoTemplate = new MongoTemplate(MongoClients.create(), "test");
    Query query = Query.query(Criteria
                                   .where("topic._topicId").is(topicId)
                                   .and("topic.reply._replyId").is(topicReplyId));
    Update update = new Update().pull("topic.$.reply", new Document("_replyId", topicReplyId));
    mongoTemplate.updateFirst(query, update, "topics"); // "topics" is the collection name
    


    [編集追加]

    (2)replyを取得するための集計クエリ ドキュメント:

    db.topics.aggregate( [
      { $unwind: "$topic" },
      { $match: { "topic._topicId": topicId } },
      { $unwind: "$topic.reply" },
      { $match: { "topic.reply._replyId": topicReplyId } },
      { $project: { _id: 0, reply: "$topic.reply" } }
    ] ).pretty()
    

    これは次を返します:

    {
            "reply" : {
                    "_replyId" : "07a0293a-22a1-45fb-9aa2-775fa24e9915",
                    "username" : "test1",
                    "content" : "reply1",
                    "date" : 1583240955561
            }
    }
    



    1. Mongodb:Java(およびJavaScript)でのdb.printShardingStatus()/ sh.status()呼び出し

    2. 別のモデルのインスタンスメソッドで別のモデルをクエリする

    3. (どのように)aggregate()はインデックスを壊すことができますか?

    4. MongoDB Javaドライバー:並べ替えで区別