MongoDB Aggregation проверяет, содержит ли массив значения - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть следующие документы.

{
    "_id" : ObjectId("5e9d9503853d3e2149fe6a22"),
    "Profitloss" : "PROFIT",
    "Remark" : null,
    "IsSelectedUser" : true,
    "UserList" : [ 
        ObjectId("5e9d2ba9853d3e2149fe6a07")
    ],
    "SenderId" : ObjectId("5e57a9477f8a1218849c9fc7"),
    "CreateDate" : ISODate("2020-04-20T12:26:43.725Z"),
    "ExitPrice" : 530,
    "FinalAmount" : 23160,
    "IsUpdate" : true,
    "LastModify" : ISODate("2020-04-20T12:56:23.794Z")
},{
    "_id" : ObjectId("5e9d9503853d3e2149fe6a22"),
    "Profitloss" : "PROFIT",
    "Remark" : null,
    "IsSelectedUser" : true,
    "UserList" : [ 
        ObjectId("5e9d2ba9853d3e2149fe6a08")
        ObjectId("5e9d2ba9853d3e2149fe6a09")
    ],
    "SenderId" : ObjectId("5e57a9477f8a1218849c9fc7"),
    "CreateDate" : ISODate("2020-04-20T12:26:43.725Z"),
    "ExitPrice" : 530,
    "FinalAmount" : 23160,
    "IsUpdate" : true,
    "LastModify" : ISODate("2020-04-20T12:56:23.794Z")
}

Предположим, мой идентификатор "5e57a9477f8a1218849c9fc7". поэтому при получении документов мне нужны все данные, но если в массиве UserList был мой идентификатор, то я хочу добавить 1 поле, например «IsMyStatus»: true, а если не существует, то «IsMyStatus»: false. итоговый результат будет таким:

{
    "_id" : ObjectId("5e9d9503853d3e2149fe6a22"),
    "Profitloss" : "PROFIT",
    "Remark" : null,
    "IsSelectedUser" : true,
    "UserList" : [ 
        ObjectId("5e9d2ba9853d3e2149fe6a07")
    ],
    "SenderId" : ObjectId("5e57a9477f8a1218849c9fc7"),
    "CreateDate" : ISODate("2020-04-20T12:26:43.725Z"),
    "ExitPrice" : 530,
    "FinalAmount" : 23160,
    "IsUpdate" : true,
    "LastModify" : ISODate("2020-04-20T12:56:23.794Z"),
    "IsMyStatus" : true

},{
    "_id" : ObjectId("5e9d9503853d3e2149fe6a22"),
    "Profitloss" : "PROFIT",
    "Remark" : null,
    "IsSelectedUser" : true,
    "UserList" : [ 
        ObjectId("5e9d2ba9853d3e2149fe6a08")
        ObjectId("5e9d2ba9853d3e2149fe6a09")
    ],
    "SenderId" : ObjectId("5e57a9477f8a1218849c9fc7"),
    "CreateDate" : ISODate("2020-04-20T12:26:43.725Z"),
    "ExitPrice" : 530,
    "FinalAmount" : 23160,
    "IsUpdate" : true,
    "LastModify" : ISODate("2020-04-20T12:56:23.794Z"),
     "IsMyStatus" : false
}

1 Ответ

0 голосов
/ 26 апреля 2020

Попробуйте это:

db.collection.aggregate([
  {
    $addFields: {
      IsMyStatus: {
        $in: [
          ObjectId("5e57a9477f8a1218849c9fc7"),
          "$UserList"
        ]
      }
    }
  }
])

MongoPlayground

...