🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@contentstack/datasync-mongodb-sdk

Package Overview
Dependencies
Maintainers
2
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@contentstack/datasync-mongodb-sdk

Mongodb query wrapper around contents synced via @contentstack/content-store-mongodb

latest
Source
npmnpm
Version
1.0.15
Version published
Maintainers
2
Created
Source

Contentstack

Contentstack is a headless CMS with an API-first approach. It is a CMS that developers can use to build powerful cross-platform applications in their favorite languages. Build your application frontend, and Contentstack will take care of the rest. Read More.

Contentstack DataSync MongoDB SDK

Contentstack DataSync provides MongoDB SDK to query applications that have locally stored contents in mongodb. Given below is the detailed guide and helpful resources to get started.

Prerequisite

  • Nodejs, v20+
  • MongoDB, v3.6 or higher
  • You should have the data synced through Contentstack DataSync

Note For optimal performance, we recommend that you add indexes on the following keys of your collections

  • _content_type_uid: 1
  • uid: 1
  • locale: 1
  • updated_at: -1

Configuration

PropertyTypeDefault valueDescription
dbNamestringcontentstack-persistent-dbOptional The MongoDB database name
collectionstringcontentsOptional MongoDB database's collection names
urlstringmongodb://localhost:27017Optional. The MongoDB connection URI
limitnumber100Optional. Caps the total no of objects returned in a single call
skipnumber0Optional. Number of objects skipped before the result is returned
indexesobjectsee config belowOptional. Option to create db indexes via configuration
projectionsobjectsee config belowOptional. Mongodb projections. Keys provided here would be displayed/filtered out when fetching the result
optionsobjectsee config belowOptional. MongoDB connection options Ref. for more info
referenceDepthnumber2Optional The default nested-reference-field depth that'd be considered when calling .includeReferences(). This can be overridden by passing a numerical argument to .includeReferences(4)

Config Overview

Here's an overview of the SDK's configurable properties

{
  contentStore: {
    collection: {
      asset: 'contents',
      entry: 'contents',
      schema: 'content_types',
    },
    dbName: 'contentstack-db',
    indexes: {
      _content_type_uid: 1,
      locale: 1,
      uid: 1,
      updated_at: -1,
    },
    limit: 100,
    locale: 'en-us',
    // http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html
    options: {
      autoReconnect: true,
      connectTimeoutMS: 15000,
      keepAlive: true,
      noDelay: true,
      reconnectInterval: 1000,
      reconnectTries: 20,
      useNewUrlParser: true,
    },
    projections: {
      _content_type_uid: 0,
      _id: 0,
    },
    referenceDepth: 2,
    skip: 0,
    url: 'mongodb://localhost:27017',
  },
}

Sample SDK Query

Here's a sample SDK query to get started.

Learn more on how to query using datasync-mongodb-sdk here.

import { Contentstack } from 'datasync-mongodb-sdk'
const Stack = Contentstack.Stack(config)

Stack.connect()
  .then(() => {
    return Stack.contentType('blog')
      .entries()
      .language('en-gb') // Optional. If not provided, defaults to en-us
      .include(['authors'])
      .includeCount()
      .includeContentType()
      .queryReferences({'authors.firstName': 'R.R. Martin'})
      .then((result) => {
        // Your result would be
        // {
        //   entries: [...], // All entries, who's first name is R.R. Martin
        //   content_type_uid: 'blog',
        //   locale: 'es-es',
        //   content_type: {...}, // Blog content type's schema
        //   count: 3, // Total count of blog content type
        // }
      })
  })
  .catch((error) => {
    // handle errors..
  })

Important: You need to call .connect(), to initiate SDK queries!

Once you have initialized the SDK, you can start querying on mongodb

Querying

  • Notes

    • By default, 'content_type_uid' and 'locale' keys as part of the response.
    • If .language() is not provided, then the 1st language, provided in config.defaultLocale would be considered.
    • If querying for a single entry/asset (using .entry() OR .findOne()), the result will be an object i.e. { entry: {} }, if the entry or asset is not found, { entry: null } will be returned.
    • Querying multiple entries, would return { entries: [ {...} ] }.
    • By default, all entry responses would include their referred assets. If .excludeReferences() is called, no references (including assets) would not be returned in the response.
  • Query a single entry

// Sample 1. Returns the 1st entry that matches query filters
Stack.contentType('blog')
  .entry() // OR .asset()
  .find()
  .then((result) => {
    // Response
    // result = {
    //   entry: any | null,
    //   content_type_uid: string,
    //   locale: string,
    // }
  })
  .catch(reject)

// Sample 2. Returns the 1st entry that matches query filters
Stack.contentType('blogs')
  .entries() // for .assets() 
  .findOne()
  .then((result) => {
    // Response
    // result = {
    //   entry: any | null,
    //   content_type_uid: string,
    //   locale: string,
    // }
  })
  .catch(reject)
  • Querying a set of entries, assets or content types
Stack.contentType('blog')
  .entries() // for .assets() 
  .includeCount()
  .find()
  .then((result) => {
    // Response
    // result = {
    //   entry: any | null,
    //   content_type_uid: string,
    //   count: number,
    //   locale: string,
    // }
  })
  .catch(reject)

Advanced Queries

In order to learn more about advance queries please refer the API documentation, here.

Further Reading

Support and Feature requests

If you have any issues working with the library, please file an issue here at Github.

You can send us an e-mail at support@contentstack.com if you have any support or feature requests. Our support team is available 24/7 on the intercom. You can always get in touch and give us an opportunity to serve you better!

License

This repository is published under the MIT license.

Keywords

contentstack

FAQs

Package last updated on 10 Apr 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts