Мангуста заселена и где оговорка о объединенной коллекции - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь сделать multi-join с предложением where, используя mongoose.Как мне правильно выполнить предложение where?

Я просмотрел документацию по народонаселению мангуста и другие ответы, но в результате моего текущего запроса возвращаются дополнительные документы.У меня работает экспресс-сервер узлов, и я использую Postman для достижения своей конечной точки.

Вот моя основная схема, которая имеет все внешние ключи.В Схеме Locker есть свойство с именем IsUsed (Boolean), которое я пытаюсь использовать для предложения where

const userLockerMapSchema = new Schema({
  UserId: { type: Schema.Types.ObjectId, ref: "User" },
  SchoolId: { type: Schema.Types.ObjectId, ref: "School" },
  StationId: { type: Schema.Types.ObjectId, ref: "Station" },
  LockerId: { type: Schema.Types.ObjectId, ref: "Locker" },
});

Чтобы присоединиться к этим коллекциям, я делаю следующий запрос:

UserLockerMap.find({
      UserId: userId
    })
      .populate("SchoolId")
      .populate("StationId")
      .populate({
        path: "LockerId",
        match: {
          IsUsed: true
        }
      })

Я бы хотел, чтобы запрос возвращал только список коллекций, в которых LockerId.IsUsed = true.Примерно так:

{
        "_id": "5c39825a9d268184fe5",
        "UserId": "5ca4oiuo23ua30ce528",
        "SchoolId": {
            "EmailDomain": [
                "@tu1"
            ],
            "_id": "5cd2nlkacf0d48e333",
            "Name": "Test Uni 1",
            "CreatedAt": "2019-05-07T00:01:16.506Z",
            "__v": 0
        },
        "StationId": {
            "_id": "5cdlaje93cf0d48e334",
            "AtSchoolId": "5cd0cacc24ae93cf0d48e333",
            "Name": "Test S1",
            "CreatedAt": "2019-05-07T00:01:29.095Z",
            "__v": 0
        },
        "LockerId": {
            "_id": "5cd0caea24ae93cf0d48e337",
            "StationId": "5cd0cad924ae93cf0d48e334",
            "LockerName": "TL2",
            "IsUsed": true,
            "CreatedAt": "2019-05-07T00:01:46.784Z",
            "__v": 0
        },
        "StartedAt": "2019-05-07T05:07:14.161Z",
        "EndAt": "2019-05-07T05:12:14.161Z",
        "__v": 0
    }

Приведенный выше запрос фактически возвращает все коллекции, однако значение LockerId возвращается как ноль, где LockerId.IsUsed! = True.Т.е.

{
        "_id": "97287e5b7cab8a0d173cbddb7",
        "UserId": "5ca812232327a30ce528",
        "SchoolId": {
            "EmailDomain": [
                "@tu1"
            ],
            "_id": "9238ojjelkjlka33q",
            "Name": "Test Uni 1",
            "CreatedAt": "2019-05-07T00:01:16.506Z",
            "__v": 0
        },
        "StationId": {
            "_id": "5cd0cad924ae93cf0d48e334",
            "AtSchoolId": "5cd0cacc24ae93cf0d48e333",
            "Name": "Test S1",
            "CreatedAt": "2019-05-07T00:01:29.095Z",
            "__v": 0
        },
        "LockerId": null,
        "StartedAt": "2019-05-07T01:56:07.829Z",
        "EndAt": "2019-05-07T02:01:07.829Z",
        "__v": 0
    },
{
        "_id": "5c39825a9d268184fe5",
        "UserId": "5ca4oiuo23ua30ce528",
        "SchoolId": {
            "EmailDomain": [
                "@tu1"
            ],
            "_id": "5cd2nlkacf0d48e333",
            "Name": "Test Uni 1",
            "CreatedAt": "2019-05-07T00:01:16.506Z",
            "__v": 0
        },
        "StationId": {
            "_id": "5cdlaje93cf0d48e334",
            "AtSchoolId": "5cd0cacc24ae93cf0d48e333",
            "Name": "Test S1",
            "CreatedAt": "2019-05-07T00:01:29.095Z",
            "__v": 0
        },
        "LockerId": {
            "_id": "5cd0caea24ae93cf0d48e337",
            "StationId": "5cd0cad924ae93cf0d48e334",
            "LockerName": "TL2",
            "IsUsed": true,
            "CreatedAt": "2019-05-07T00:01:46.784Z",
            "__v": 0
        },
        "StartedAt": "2019-05-07T05:07:14.161Z",
        "EndAt": "2019-05-07T05:12:14.161Z",
        "__v": 0
    }
...