npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

nayo

v2.0.0

Published

nayo is the operation interfaces for mongoDB by nodejs

Readme

nayo

The simple operation interface for mongoDB by Nodejs and Python


Update Log

  • the version 2.0.0 add the python version
  • update the workPack and the options while initing the Nayo

nayo-project

Here are other projects in nayo-project, if it help u welcome to star this project~ thx~

  • nayo-mongo --> link
  • nayo-admin-core --> link
  • nayo-admin --> link

1.Introduction

Nayo is a simple operation interfaces based on the workList-workPack conceptual design.

You can use the simple workList to operate the MongoDB, and the workList is easy to be created.

2.What is the workList and workPack?

In Nayo, workList is the array, and workPack is the json;

just like this

[
    {
        "db": "test",
        "collection": "test",
        "target_doc": {"test": "test"},
        "method": 0,
        "doc": null,
        "param": null,
        "pipeline": null
    },
    {
        "db": "test",
        "collection": "test",
        "target_doc": {"test": "test"},
        "method": 0,
        "doc": null,
        "param": null,
        "pipeline": null
    }
]

before you use the Nayo, you should learn the operations of MongoDB, here the doc of MongoDB

the workList has two workPack, mongoDB can execute the task via every workPack.

if you have only one task, you should let the workList contain this task,

just like this

[
    {
        "db": "test",
        "collection": "test",
        "target_doc": {"test": "test"},
        "method": 0,
        "doc": null,
        "param": null,
        "pipeline": null
    }
]

when the workList's length is above 1, like 2, 3, or more, nayo can translate the workList to transaction.

so, let me tell you about the workPack,

every workPack is a json, just like this

{
    "db": "test",
    "collection": "test",
    "target_doc": {"test": "test"},
    "method": 0,
    "doc": null,
    "param": null,
    "pipeline": null
}
  • db: the workPack will do in this db, if you set it wrong, nayo will throw error
  • collection: the collection name of db, it should be required
  • target_doc: if the method have the target document, you should write this, the query is same as the orignal operation, like {xxx: xxx} in db.test.find({xxx: xxx}); if the method haven't the traget document, you should set the target_doc to null
  • method: the number of operation method:
    • insertOne ---> 0
    • deleteOne ---> 1
    • findOne ---> 2
    • findOneAndUpdate ---> 3
    • aggregate ---> 4
    • deleteMany ---> 5
    • updateMany ---> 6
  • doc: if the method has some document to update or create, you should write this, the query is same as the orignal operation, like {$set: {"xxx": "xxx"}} in db.test.insertOne({$set: {"xxx": "xxx"}}); if the method haven't the doc, you should set the target_doc to null
  • param: if the orignal operation have the parameter option, you can wirte the param, like "limit", "sort" and so on. by the way, the param should be {} if you don't write it
  • pipeline: if the method is aggregate, here is the place to write the pipeline, the way is same as the orignal, you can see the doc of aggregate, if you don't use the pipeline, you should set it to null

Notice: the method "transaction" only support the method "insertOne", "deleteOne", "findOneAndUpdate", "deleteMany", "updateMany", if you have some great ideas you can commit the issue, I'm so glad to know more ways to promote NAYO

Here is the doc, you can learn about the orignal operation CURD in detail.

OK, all these are about the introduction of the workList and workPack, if you still have question, you can commit issue for help.

3.Install

npm install nayo --save

or download this repo to use

4.Examples

you can find how to write the options and the config

const Nayo = require("nayo");

// init NAYO
// here is two params, options and config

let options = {
    url: "xxx"  // mongodb url, options only have this params now
}

/*
default config
config = {
    connection: {
        readPreference: "secondaryPreferred",
        readConcern: {
            level: "majority"
        }
    },
    transaction: {
        readConcern: { level: 'majority' },
        writeConcern: { w: 1 }
    },
    logging: Function-name
}
*/
let logging_function = (process_time, query_statement) => {
    // do something
    // if you don't write your function, the default function will work
    // this function has two argument, you can use it
    // process_time ----> the process's execution time(ms)
    // query_statement ----> the command sentence which can use on the MongoShell, btw, the query_statement is an Array
}

let config = {  // this is the mongoDB connection and transaction config
                // see http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html for connection config infomation
                // see https://docs.mongodb.com/manual/core/transactions/#transaction-options-read-concern-write-concern-read-preference for transaction config infomation
    connection: {
        /**/
    },
    transaction: {
        /**/
    },
    logging: logging_function     // don't write the function, should write function name
}
const nayo = new Nayo(options, config);

// arrange the workList and workPack
let workList = [
    {
        "db": "test",
        "collection": "test",
        "target_doc": null,
        "method": 0, // insertOne
        "doc": { "test": "test" },
        "param": null,
        "pipeline": null
    }
];

// transaction workList
// when the workList has 2 or more workPack, the transaction will auto be used
// but nayo transaction only support the method "insertOne", "deleteOne", "findOneAndUpdate", "deleteMany", "updateMany" now
let workList_transaction = [
    {
        "db": "test",
        "collection": "test",
        "target_doc": null,
        "method": 0, // insertOne
        "doc": { "test": "test" },
        "param": {},
        "pipeline": null
    },
    {
        "db": "test_1",
        "collection": "test",
        "target_doc": { "test": "test" },
        "method": 3, // insertOne
        "doc": { "$set": { "test_1": 123 } },
        "param": null,
        "pipeline": null
    },
    ...
]

// do the work
nayo.push(workList).then(res => { // if it works successfully, we will get res
    console.log(res);
}).catch(err => {   // if error, we will get err
    console.log(err);
});

// done

5.Class

  • Nayo(options, config)

the main class of nayo, you can use it by new Nayo(options, config) to generate a instance nayo , you can see the 4.Example to see the options and config's introduce

  • ReadPerence

this class is same as mongodb you can see more to learn about it, click here

// how to require ReadPerence
// Example:
const ReadPerence = require(nayo).ReadPerence
  • ObjectId

this class is same as mongodb you can see more to learn about it, click here

// how to require ObjectId
// Example:
const ObjectId = require(nayo).ObjectId

6.Method

nayo.push(workList)

return <Promise>
push the workList to translate and do the task in MongoDB, please check the sample to find how to use it

nayo.authenticate()

return <Promise>
check if the connection is successful
nayo.authenticate().then(ret => {
    console.log(ret)            // successful, will return "Connect Success"
}).catch(e => {
    console.log(e)              // occur error or fail, will return the error or "Connect Fail"
});

7.MongoClient

if you init Nayo class,you can use this below to get the MongoClient instance to do some other work

nayo = new Nayo(options, config);

# MongoClient
# this client is Promise, if you want to get detail, you should use ".then" to get it
# by the way, the client you got connect-state is unknown
# http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html
nayo.client.then(client => {
    client
}).catch(e => {...});

8.License

This library is published under the MIT license. See LICENSE for details.

8.Reference