mongo-fixture

1.0.8 • Public • Published

Mongo Fixture

Node module for populating a Mongo db using JSON.

Declaratively reference other documents in the same dataset to create relationships between them.

Install

npm install --save-dev mongo-fixture

Usage

fixture = require('mongo-fixture');

fixture('data.json', function(error){
    if(err){
        throw err;
    }
});

Example JSON file

[
    {
        "__collection": "User",
        "username": "User A",
        "age": 20,
        "active": false,
        "nonCollection": {
            "propA": "A"
        },
        "plan": {
            "__collection": "Plan",
            "__ref": "1",
            "name": "Plan A",
            "price": 100,
            "private": true,
            "specialOffer": {
                "__collection": "SpecialOffer",
                "propX": "X"
            },
            "otherProp": {
                "__collection": "OtherThing",
                "propR": "R",
                "__ref": "1"
            }
        }
    },
    {
        "__collection": "User",
        "username": "User B",
        "age": 20,
        "active": true,
        "plan": {
            "__collection": "Plan",
            "__duplicate": "1"
        }
    },
    {
        "__collection": "User",
        "username": "User C",
        "age": 32,
        "active": true,
        "plan": {
            "__collection": "Plan",
            "__ref": "2",
            "name": "Plan B",
            "price": 200,
            "private": false,
            "specialOffer": {
                "__collection": "SpecialOffer",
                "propX": "Y"
            },
            "otherProp": {
                "__collection": "OtherThing",
                "__duplicate": "1"
            }
        }
    },
    {
        "__collection": "User",
        "username": "User D",
        "age": 33,
        "active": true,
        "plan": {
            "__collection": "Plan",
            "__duplicate": "2"
        }
    }
]

Child Documents

Child documents are simple JSON objects with a __collection attribute. The child objects become ObjectId references when the db is populated.

Eg:

{
    "__collection": "ParentCollection",
    child: {
        "__collection": "ChildCollection",
        "keyX": "valueX"
    }
}

Becomes the following documents:

// ParentCollection Doc
{
    child: ObjectId("55c0ade6b47164eb35a544a1")
}
// ChildCollection Doc
{
    "keyX": "valueX"
}

Duplicates

Children can belong to multiple parents using __ref and __duplicate attributes. Defined a common child once and give it a unique __ref value of your choice. Then in another parent object reference the child by specifying the __duplicate attribute and setting it to the value of the __ref of the original.

Eg:

[
    {
        "__collection": "ParentCollection",
        "child": {
            "__collection": "ChildCollection",
            "_ref": "1",
            "otherProp": "X"
        }
    },
    {
        "__collection": "ParentCollection",
        "child": {
            "__collection": "ChildCollection",
            "_duplicate": "1"
        }
    }
]

NB: always specify the __collection attribute.

Testing

npm test

Contributing

Pull requests, check the current source code for style. Its in coffeescript. And cheers

Package Sidebar

Install

npm i mongo-fixture

Weekly Downloads

0

Version

1.0.8

License

MIT

Last publish

Collaborators

  • finnfiddle