NCMB（Nifty Cloud Mobile Backend）データストアの基本操作チートシート（JavaScript SDK）

自分なりにまとめてみました。足りないものは随時更新。

## 使用するための準備
SDKの入手やセットアップは下記リンクを参考に。
https://mbaas.nifcloud.com/doc/current/introduction/sdkdownload_javascript.html#gsc.tab=0

```javascript
var ncmb = new NCMB("ApplicationKey", "ClientKey");
```

## レコードの取得（Select）
#### 1レコードだけの取得の場合
```javascript
let object = ncmb.DataStore("DataStoreClassName");

object.equalTo("objectId", value)
      .fetch()
      .then(function(result){
          // 取得時処理
      }).catch(function(err){
          // 取得エラー処理
      });
```
#### 複数レコード取得の場合
```javascript
let objects = ncmb.DataStore("DataStoreClassName");

objects.equalTo("fieldName", value)
       .fetchAll()
       .then(function(result){
           // 取得時処理
       }).catch(function(err){
           // 取得エラー処理
       });
```
#### 件数取得（結果の総数を取得）
```javascript
let objects = ncmb.DataStore("DataStoreClassName");

objects.equalTo("fieldName", value)
       .count()
       .fetchAll()
       .then(function(result){
           // 取得時処理
       }).catch(function(err){
           // 取得エラー処理
       });
```

#### 主に検索で使用するクエリ（その他は共通クエリオペレータを参照）
```javascript
// 取得最大件数の指定（1~1,000件の範囲での指定のみ）
.limit(limitValue)

// 検索結果の開始位置指定(0番目からカウントしてvalue番目以降を取得)
.skip(value)

// 昇順ソート
.order("fieldName")
.order("fieldName", false)

// 降順ソート
.order("fieldName", true)

// 複数ソート　※先に指定したキーが優先
.order("fieldName1", true).order("fieldName2")
```


## レコードの挿入（Insert）
各fieldNameとvalueをセットして挿入。

```javascript
let object = new ( ncmb.DataStore("DataStoreClassName") );

object.set("fieldName", value)
      .fetch()
      .then(function(insertObject){
          insertObject.set("fieldName", value)
                      .save()
                      .then(function(result){
                          // 挿入完了時処理
                      }).catch(function(err){
                          // 挿入エラー処理
                      });
      });
    
```

## レコードの更新（Update）
objectIdが一致するレコードに対し、セットしたフィールドを更新。

```javascript
let object = ncmb.DataStore("DataStoreClassName");

object.equalTo("objectId", objectId)
      .fetch()
      .then(function(updateObject){
          updateObject.set("fieldName", value)
                      .update()
                      .then(function(result){
                        // 更新完了時処理
                      }).catch(function(err){
                        // 更新エラー処理
                      });
      });
    
```

## レコードの削除（Delete）
objectIdが一致するレコードを削除。

```javascript
let object = ncmb.DataStore("DataStoreClassName");

object.equalTo("objectId", objectId)
      .fetch()
      .then(function(deleteObject){
          deleteObject.delete()
                      .then(function(result){
                          // 削除完了時処理
                      }).catch(function(err){
                          // 削除エラー処理
                      });
      });
    
```

## 共通クエリオペレータ
#### 文字列・数値・真偽値等で使用
```javascript
// fieldValue === value
.equalTo("fieldName", value)

// fieldValue !== value
.notEqualTo("fieldName", value)

// fieldValue > value
.greaterThan("fieldName", value)

// fieldValue >= value
.greaterThanOrEqualTo("fieldName", value)

// fieldValue < value
.lessThan("fieldName", value)

// fieldValue <= value
.lessThanOrEqualTo("fieldName", value)


// 部分一致 ( fieldValue LIKE %value% )
.regularExpressionTo("fieldName", ".*" + value + ".*$")


// (fieldValue === value1) || (fieldValue === value2) || (fieldValue === value3)
.in("fieldName", [value1, value2, value3])

// (fieldValue !== value1) && (fieldValue !== value2) && (fieldValue !== value3)
.notIn("fieldName", [value1, value2, value3])

// fieldValue != null
.exists("colName")
    
```

#### 配列で使用
```javascript
// value のいずれかと一致
.equalTo("arrayFieldName", value)

// arrayValue の値の内、いずれかを含む
.inArray("arrayFieldName", arrayValue)

// arrayValue の値の内、いずれとも一致しない
.notInArray("arrayFieldName", arrayValue)

// arrayValue の値の内、全てが一致
.allInArray("arrayFieldName", arrayValue)
    
```

## クエリの合成
#### AND合成
各メソッドを続けて記述すればOK。

```javascript
let object= ncmb.DataStore("DataStoreClassName");
object.lessThan("fieldName1", value1)
      .equalTo("fieldName2", value2)
      .fetchAll()
      .then(function(results){
          // 取得時処理
      }).catch(function(err){
          // エラー時処理
      });

```
#### OR合成
orメソッドで合成。ただしorメソッドを複数使用して複雑なクエリを作ることはできないので注意。

```javascript
let object= ncmb.DataStore("DataStoreClassName");
let query1 = object.lessThan("fieldName1", value1);
let query2 = object.equalTo("fieldName2", value2);
let query = [ query1 , query2 ];

object.or([])
      .fetchAll()
      .then(function(results){
          // 取得時処理
      }).catch(function(err){
          // エラー時処理
      });
```

## おまけ
自動でセットされるcreateDate/updateDate(timestamp)をDateに変換

```javascript
let objects = ncmb.DataStore("DataStoreClassName");
objects.equalTo("fieldName", value)
       .fetchAll()
       .then(function(result){
           for(let i=0; i < result.length; i++){
               let date = new Date( result[i].createDate );
               console.log(date);
           }
       }).catch(function(err){
           // 取得エラー処理
       });
```