Как превратить несколько элементов массива в mongod от mongoose - PullRequest
0 голосов
/ 20 апреля 2020

Существует схема mongodb, которая включает в себя эти поля, ее тип - массив

......
orderlist: [
    {
      id: String,
      price: Number,
      photo: String,
      name: String,
      num: Number
    }
  ]
......

Интерфейс отправит мне данные, такие как этот, этот массив имеет множество элементов массива

goodslist:[
  {
    goodsid: '10001',
    goodsprice: 20,
    goodsphoto: '/goodsimg/upload_1843.jpg',
    goodsname: 'goods1',
    goodsnum: 2
  },
  {
    goodsid: '10002',
    goodsprice: 30,
    goodsphoto: '/goodsimg/upload_1845.jpg',
    goodsname: 'goods2',
    goodsnum: 4
  },
........(etc)
]

что я могу сделать, чтобы pu sh эти данные "списка товаров" в поле "список заказов" по понедельникам goose без изменения поля mongodb, спасибо

Ответы [ 2 ]

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

Это будет примерно так:

//Update order | create if does not exist
                        orderDB.updateOne({ _id: 'xxxx' }, {

                            //Push the list into order array
                            $push: {
                                orderlist: [{
                                    id: goodlist[0][0],
                                    price: goodlist[0][1],
                                    photo: goodlist[0][2],
                                    name: goodlist[0][3],
                                    num: goodlist[0][4],
                                }]
                            }

                            //Upsert => update / create
                        }, { upsert: true })

Однако вам может понадобиться l oop через список товаров.

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

Вы должны использовать mon goose virtuals для решения этой проблемы.

Ваша схема должна выглядеть следующим образом:

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

const OrderSchema = new Schema({
  id: String,
  price: Number,
  photo: String,
  name: String,
  num: Number
}, { minimize: false });

const OrderlistSchema = new Schema({
  orderList: [OrderSchema]
}, { minimize: false, toJSON: { virtuals: true } });

OrderlistSchema.virtual('goodslist').
  get(function () {
    return this.orderList.map(order => ({
      goodsid: order.id,
      goodsprice: order.price,
      goodsphoto: order.photo,
      goodsname: order.name,
      goodsnum: order.num
    }))
  }).
  set(function (v) {
    this.set({
      orderList: v.map(good => ({
        id: good.goodsid,
        price: good.goodsprice,
        photo: good.goodsphoto,
        name: good.goodsname,
        num: good.goodsnum
      }))
    });
  });

module.exports = mongoose.model('Orderlist', OrderlistSchema, collectionName);

goodslist - это виртуальное поле здесь , С помощью этой схемы вы можете установить порядок полей в своем формате, не меняя ничего в mongodb. Пример размещения документа:

{
  "goodslist": [
    {
      "goodsid": 2,
      "goodsprice": 200,
      "goodsphoto": "photo2",
      "goodsname": "name2",
      "goodsnum": 1234
    }
  ]
}

Вы также можете получить данные заказа в формате Goodlist

{
    "_id": "5e9d8c0e27c7a813840c9ff0",
    "orderList": [
        {
            "_id": "5e9d8c0e27c7a813840c9ff1",
            "id": "2",
            "price": 200,
            "photo": "photo2",
            "name": "name2",
            "num": 1234
        }
    ],
    "__v": 0,
    "goodslist": [
        {
            "goodsid": "2",
            "goodsprice": 200,
            "goodsphoto": "photo2",
            "goodsname": "name2",
            "goodsnum": 1234
        }
    ],
    "id": "5e9d8c0e27c7a813840c9ff0"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...