MongoDb: Mongoose добавляет элементы из другой коллекции в другую коллекцию - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в MongoDb и использую мангуст для бэкэнда. К сожалению, я застрял с этой проблемой, когда я хочу, чтобы элементы из ItemModel были представлены в виде массива в CartModel, и пользователь может удалять и добавлять дополнительные элементы в эту корзину.

Вот мой код для CartModel:

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

const ItemModel = mongoose.model('Item');
//cart id
//cart name
//cart total cost
//cart items
let cartSchema = new Schema(
    {
       cartId :{
           type:String,
           unique:true
       },
       cartName:{
           type:String,
           default:'Item Cart'
       },
       items:[{type:Schema.Types.ObjectId, ref:'Item'}]
    }
);

mongoose.model('Cart',cartSchema);

Вот мой ItemModel:

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

const defaultString = "NOT ASSIGNED";

let itemSchema = new Schema(
    {
        itemId :{
            type:String,
            unique : true
        },
        itemName : {
            type: String,
            default : defaultString
        },
        description : {
            type : String,
            default : defaultString
        },
        soldBy : {
            type : String,
            default : defaultString
        },
        cost : {
            type : Number,
            default : 0
        },
        rating : {
            type : Number,
            default : 1
        },
        category:{
            type : String,
            default : defaultString
        }

    }
);

mongoose.model('Item',itemSchema);

Вот метод контроллера:

    let addItemToCart = (req, res) => {

    let itemId = req.itemId;
    let item = getItem(itemId);

    // getting item from ItemModel
    // checking if its null or not, or present or not
    let getItem = (itemId) => {
        let item = null;

        ItemModel.findOne({
            'itemId': req.params.itemId
        }, (err, result) => {
            if (err) {
                item = null;
            } else if (result == undefined || result == null || result == "") {
                item = null;
            } else {
                logger.info("item found successfully", "Item controller:cart add item", 5)
                item = result;
            }
        });

        return item;
    }

    // stuck here, how to add it to CartModel Collection
    CartModel.populate('items.getItem').exec(

    );

}

Пожалуйста, помогите, и заранее спасибо

1 Ответ

0 голосов
/ 02 мая 2018

То, что вы можете здесь сделать, это сопоставить две коллекции на основе objectId или чего-то подобного itemid или чего-либо еще в корзине может быть несколько товаров, но обратное невозможно, поэтому

отношение один ко многим

это один Cart и много Item, так что вы можете в элементе дать cartId, а затем он скажет, что этот элемент принадлежит к какой корзине во время оформления заказа, поэтому включите cartid, а затем несколько элементов могут иметь тот же Cartid теперь вы можете получить весь элемент в виде массива, используя

 ItemModel.findOne({
        'CartId': req.params.CartId
    }, (err, result) => {
                return result.json();
      }
...