【问题标题】:Conditional check column value in mongodbmongodb中的条件检查列值
【发布时间】:2021-05-07 01:17:46
【问题描述】:

我有如下文件

 [
    {
        "_id" : ObjectId("601992e354787877866"),
        "status" : 1,
        "user_id" : 2,
    
    },
    {
        "_id" : ObjectId("601992e354787877866"),
        "status" : 2,
        "user_id" : 2,
    
    },
    {
        "_id" : ObjectId("601992e354787877866"),
        "status" : 2,
        "user_id" : 3,
    
    },
     {
        "_id" : ObjectId("601992e354787877866"),
        "status" : 3,
        "user_id" : 4,
    
    }
    ]

status 列的值可以是 1、2 或 3。只有当 status 列的值为 2 并且状态不是 2 的文档将按原样出现时,我才想匹配 user_id。

我尝试过匹配查询

 db.collection.find({"status" : 1});

但它只会匹配状态

现在如果我的用户 id 是 2 那么输出应该是 b

[
     {
            "_id" : ObjectId("601992e354787877866"),
            "status" : 1,
            "user_id" : 2,
        
        },
        {
            "_id" : ObjectId("601992e354787877866"),
            "status" : 2,
            "user_id" : 2,
        
        },
         {
            "_id" : ObjectId("601992e354787877866"),
            "status" : 3,
            "user_id" : 4,
        
        }
        ]

在这里您可以看到状态为 2 且 user_id 不等于 2 的文档不在预期的输出中,但状态不是 2 的文档将出现结果

【问题讨论】:

  • 你想要的是this吗?还发布一个输入示例和预期输出以更好地理解。
  • 用更多细节更新了问题。请检查

标签: mongodb mongoose mongodb-query mongoose-schema


【解决方案1】:

您可以使用$or 运算符:https://mongoplayground.net/p/y9vR2PEGYdI

db.collection.find({
  $or: [
    {
      status: 2,
      user_id: 2
    },
    {
      status: {
        $ne: 2
      }
    }
  ]
})

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多