【问题标题】:Finding specific object(s) from multiple arrays and then do crud operations with Mongodb从多个数组中查找特定对象,然后使用 Mongodb 进行 crud 操作
【发布时间】:2022-08-20 04:46:26
【问题描述】:

这是我收藏的截图:

这是我的查询:

db.collection(\"collection_name\").aggregate(
[
{$match: 
{br_date: this.data.date}
}
]).toArray()

而且,这就是我得到的

_id: id,
brdate: 10-08-2022
brName: \"Principal Branch, Dhaka\",
email: \"example_email,
loans: [

[
{loan_id: 1, loan_name: X, category: \"rural\"},
{loan_id: 2, loan_name: Y, category: \"urban\"},
{loan_id: 3, loan_name: Z, category: \"rural\"}
],

[
{loan_id: 4, loan_name: A, category: \"rural\"},
{loan_id: 5, loan_name: B, category: \"urban\"}
],

]

问题一:我想根据类别显示贷款。假设,我想显示来自“农村”类别的贷款。我怎么做?

问题2:我可能必须删除与loan_id 匹配的贷款。我怎么做?

问题 3:我可能必须更新与loan_id 匹配的贷款。我怎么做?

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    由于loans 是一个数组数组,我将使用$[<i>] 过滤位置运算符: https://www.mongodb.com/docs/manual/reference/operator/update/positional-filtered/

    1.

    db.testie.aggregate([{
        $match: {
            _id: { $eq: ObjectId("62fb3af6a9b543178fb28bb5"), }
        }
    }, {
        $unwind: '$loans'
    }, {
        $unwind: '$loans'
    }, {
        $group: { _id: "$loans.category", loanCategory: { $addToSet: '$loans' } }
    }])
    
    db.collection.updateOne({
        "_id" : id,
    }, {
        $pull: { 'loans.$[]': { 'category': 'test_category' } }
    });
    
    db.collection.updateOne({
        "_id" : id,
    }, {
        $set: { 'loans.$[].$[loan].category': 'test_category' }
    }, {
        arrayFilters: [{ 'loan.loan_id': 3 }]
    });
    
    

    聚合: https://mongoplayground.net/p/8NmT6Qn3Wh7

    删除 https://mongoplayground.net/p/LUDrpDLP6kN

    更新 https://mongoplayground.net/p/sRAvJiWOYmV

    【讨论】:

    • 恐怕它不起作用。我正在添加我收藏的屏幕截图。你能看看它并建议我应该如何进行吗?
    • 您能否详细说明究竟是什么不起作用?为了更新数组中的特定元素,您应该使用位置运算符:mongodb.com/docs/manual/reference/operator/update/positional
    • 在我的问题中,有 Array.在那个数组里面有另一个数组或几个数组。而且,在这些数组中,有对象。所以,你可以看到,有细微的差别。如果我有一个数组,你的代码就可以工作,在那个数组里面有对象。对于聚合任务,这个帮助了我:stackoverflow.com/questions/33034524/… 因为我在数组中有数组,所以我需要在那里双重展开。
    • @Rashel 好的,现在我了解您的用例了。我已经更新了我的帖子,看看。
    • 对不起,我离开电脑两天了。顺便说一句,更新的答案完美无缺。谢谢。我创建了 mongodb 游乐场共享代码并将代码添加到您的答案中。
    猜你喜欢
    • 2021-09-24
    • 2021-02-09
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多