1.0.2 • Published 2 years ago

express-mgo v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

Required bson package and only work with mongoose

NOTE, This is just little part of how to use this package

IF HAVE FREE TIME I WILL ADJUST DOCS AND PACKAGE

Default query

  • start_date
  • end_date
  • q ? use for search use with setSearchField Function
  • limit
  • page
  • sort ? EX: created_at|desc or created_at|asc
  • summary ? summary response

Function

  • lookup ? Join with lookup concept
  • populate ? Joi with mongoose concept
  • set ? set response json
  • setSearchField ? add search field
  • match ? condition
  • custom ? custom aggregation
  • forcePaginate ? forcePaginate by requried limit & page in query
  • select ? select field
  • unset ? remove field from response
  • setOption ? option for Search & Filter Date
  • exec ? Important This function must be call after finish condition
const express = require("express")
const mongoose = require("mongoose")

const app = express()
const { Query } = require("express-mongo")

const query = new Query(mongoose)
const result = await query.model("order")
    .unset("staff_id user_id")
    .setOption({ performPaginateBeforeLogic: false })
    .setSearchField("seller_id.name", "payment_method_id.title", "order_number")
    .exec(req)


// Mongoose concept populate ex1
const query = new Query(mongoose)
const result = await query.model("order")
    // Support only object for level 1 populate
    .populate({
        path:"some_ref_field",
        select:"name"
    })
    .unset("staff_id user_id")
    .setSearchField("some_ref_field.name")
    .exec(req)

// Mongoose concept populate ex2
const query = new Query(mongoose)
const result = await query.model("order")
    // Support only object for level 1 populate
    .populate({
        path:"some_ref_field",
        select:"name",
        // also have unset,select,many
        populate:{
            modelName:"modelnameOfThisLevel",
            path:"some_ref_field",
            select:"name"
            // also have unset,select,many
        }
    })
    .unset("staff_id user_id")
    .setSearchField("some_ref_field.name")
    .exec(req)



// aggregate concept populate ex1
const query = new Query(mongoose)
await query.model("order")
    .lookup({ from: "some_model", localField: "localFieldId", foreignField: "_id", as: "localFieldId" })
    .exec(req)

// aggregate concept populate ex2 with unset: remove field
await query.model("order")
    .lookup({ from: "some_model", localField: "localFieldId", foreignField: "_id", as: "localFieldId", unset: "field1 field2" })
    .exec(req)

// aggregate concept populate ex3 with select: take only select field
await query.model("order")
    .lookup({ from: "some_model", localField: "localFieldId", foreignField: "_id", as: "localFieldId", select: "field1 field2" })
    .exec(req)

// aggregate concept populate ex4 with many: true if ONE-TO-MANY will return array
await query.model("order")
    .lookup({ from: "some_model", localField: "localFieldId", foreignField: "_id", as: "localFieldId", select: "field1 field2", many: true })
    .exec(req)

// aggregate concept populate ex4 with many: true if ONE-TO-MANY will return array
await query.model("order")
    .lookup({ from: "some_model", localField: "localFieldId", foreignField: "_id", as: "localFieldId", select: "field1 field2", many: true})
    .exec(req)



// aggregate concept $project
const query = new Query(mongoose)
await query.model("order")
    .lookup({ from: "some_model", localField: "localFieldId", foreignField: "_id", as: "localFieldId" })
    .project("field1 field2")
    .exec(req)
1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago