繁体   English   中英

检查嵌套文档的两个属性在 mongodb 中是否相等

[英]Check if two property of a nested document are equal in mongodb

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

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

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

我使用$elemMatch并且可以检查是否有任何name electricity的嵌入式文档。

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

编辑

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

询问

  • 你不能用查询运算符来做,因为你想引用一个字段,但你可以用聚合运算符和$filter来做
  • 过滤阵列并仅在electricityassigned!=given
  • 如果至少有一个子文档是已分配的electricity ,请保留该文档assigned!=given

玩蒙哥

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM