Монго поиск агрегации - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь попробовать следующее

Из журнала найдите все призы, которые ввел пользователь вернуть номера заказа и заголовок

Я использую структуру агрегации Монго.

  1. Я сопоставляю по userId
  2. Я группирую призы по одному и тому же продукту, а затем нажимаю номера заказов
  3. Я хочу взглянуть на коллекцию призов, чтобы найти название призов.

Поиск не возвращает элементов

Вот код агрегации

db.pointslogs.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $match: {
                "user": ObjectId("5aacff47c67f99103bcbf693")
            }
        },

        // Stage 2
        {
            $group: {
                _id: "$productPurchased",
                orderNumber: { $push: "$orderNumber" }
            }
        },

        // Stage 3
        {
            $unwind: {
                path : "$orderNumber",

            }
        },

        // Stage 4
        {
            $lookup: {
                "from" : "prizes",
                "localField" : "_id",
                "foreignField" : "_id",
                "as" : "title"
            }
        },

    ]

    // Created with Studio 3T, the IDE for MongoDB - https://studio3t.com/

);

Вот модели (журнал очков ниже)

var mongoose = require('mongoose');
var Schema =  mongoose.Schema;

var schema = new Schema({
    orderNumber: {type: String, required: true},
    productPurchased: {type: String, require: true},
    answer: {type: String},
    user: [{type: Schema.Types.ObjectId, ref: 'User'}]
});

module.exports =  mongoose.model('PointsLog', schema);

Призы модели ниже

var mongoose = require('mongoose');
var Schema =  mongoose.Schema;

var schema = new Schema({
    title: {type: String, required: true},
    content: {type: String, required: true},
    orderNumber: {type: String, required: true},
    imageUrl: {type: String, required: true},
    stockQty: {type: Number, required: true},
    question: {type: String, required: true},
    answers: [{type: String, required: true}],
    image: {type: String, required: true},
    cost: {type: Number, required: true },
    //entries: {type: Int},
    //user: {type: Schema.Types.ObjectId, ref: 'User'}
    user: [{type: Schema.Types.ObjectId, ref: 'User'}]

});

module.exports =  mongoose.model('Prize', schema);

Не уверен, почему поиск ничего не возвращает

1 Ответ

0 голосов
/ 12 августа 2018
 1)You can use the upgraded lookup


        Below is an Example->

        db.pointslogs.aggregate([
 // Stage 1
        {
            $match: {
                "user": ObjectId("5aacff47c67f99103bcbf693")
            }
        },

        // Stage 2
        {
            $group: {
                _id: "$productPurchased",
                orderNumber: { $push: "$orderNumber" }
            }
        },

        // Stage 3
        {
            $unwind: {
                path : "$orderNumber",

            }
        },

        // Stage 4
           {
              $lookup:
                 {
                   from: "prizes",
                   let: { oNumber: "$orderNumber" },
                   pipeline: [
                      { $match:{ $expr: { $eq: [ "$orderNumber",  "$$oNumber" ] }                  }
                         }
                      },
                      { $project: { 
        title: 1,
        content: 1,
        orderNumber: 1,
        imageUrl: 1,
        stockQty: 1,
        question: 1,
        answers: 1,
        image: 1,
        cost: 1,
        user: 1
    } }
                   ],
                   as: "orderNumber"
                 }
            }
        ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...