【问题标题】:Check if two property of a nested document are equal in mongodb检查嵌套文档的两个属性在mongodb中是否相等
【发布时间】:2022-08-17 00:40:44
【问题描述】:

我有一个像这样的user.expenses 集合

{
    userId: ObjectId(\"62f332b93753ac926ff6ac62\"),
    expenses: [ 
        { 
            name: \'electricity\',
            assigned: 400,
            given: 400,
        },
        {
            name: \'restaurant\',
            assigned: 2100,
            given: 0,
        }
    ]
}

我会从请求中得到userIdexpenses.name(electricity)。我需要检查user.expenses 集合是否有任何名称为electricityassignedexpenses 文档不等于given

我使用了$elemMatch 并且可以检查是否有任何嵌入文档的nameelectricity

db.user.expenses.find({
    userId: ObjectId(\'62f332b93753ac926ff6ac62\'),
    expenses: {
        $elemMatch: {
            name: \'electricity\',
        },
    },
});

编辑

我也尝试使用$where。但它只能应用于顶级文档。

    标签: javascript database mongodb


    【解决方案1】:

    询问

    • 你不能用查询运算符来做,因为你想引用一个字段,但你可以用聚合运算符和$filter
    • 过滤数组并仅在electricityassigned!=given时保留
    • 之后你可以保留或不保留文档,$unset 或做你需要的,例如你可以添加这个{"$match": {"$expr": {"$eq": ["$filter-expenses", []]}}} 来保留一个文档,只有在清空filter-expenses

    Playmongo

    aggregate(
    [{"$set": 
       {"filter-expenses": 
         {"$filter": 
           {"input": "$expenses",
            "cond": 
             {"$and": 
               [{"$eq": ["$$this.name", "electricity"]},
                 {"$ne": ["$$this.assigned", "$$this.given"]}]}}}}}])
    

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 1970-01-01
      • 2018-03-09
      • 2022-08-04
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多