MongoCOM

INDEX

MongoCOMとは?

MongoCOMはVBScriptやASPからMongoDBにアクセスするためのCOMライブラリです。

以下のようなことが可能です。

概要

MongoCOMは MongoDB C++ Driver の下記のクラスのCOMラッパーを提供します。

以下に簡単な使用例を示します。

demo_bson.vbs

'' '' JSON から COMオブジェクトを得て VBScript で使う '' Sub FromJSON W "==== FromJSON ====" '' get object from JSON text Dim o Set o = oMng.FromJSONString("{""title"": ""ナチュラルスタイル"", ""age"": 8, ""nsware"": [""Nmageman"", ""Guideman"", ""Nasp""]}") W TypeName(o("title").Val) & ": " & o("title") W TypeName(o("age").Val) & ": " & o("age") W TypeName(o("nsware")(0).Val) & ": " & o("nsware")(0) W TypeName(o("nsware")(1).Val) & ": " & o("nsware")(1) W TypeName(o("nsware")(2).Val) & ": " & o("nsware")(2) W "" End Sub '' '' BSON から COMオブジェクトを得て VBScript で使う '' Sub FromBSON W "==== FromBSON ====" '' base64 decode Dim b b = oMng.Base64Decode("bgAAAAJ0aXRsZQAcAAAA44OK44OB44Ol44Op44Or44K544K/44Kk44OrABBhZ2UACAAAAARuc3dhcmUAMQAAAAIwAAkAAABObWFnZW1hbgACMQAJAAAAR3VpZGVtYW4AAjIABQAAAE5hc3AAAAA=") W "LenB: " & LenB(b) '' get object from BSON binary Dim o Set o = oMng.FromBSONData(b) W TypeName(o("title").Val) & ": " & o("title") W TypeName(o("age").Val) & ": " & o("age") W TypeName(o("nsware")(0).Val) & ": " & o("nsware")(0) W TypeName(o("nsware")(1).Val) & ": " & o("nsware")(1) W TypeName(o("nsware")(2).Val) & ": " & o("nsware")(2) W "" End Sub '' '' VBScript のデータを COMオブジェクト経由で JSON に変換 '' Sub ToJSON W "==== ToJSON ====" '' BSONObjBuilder Dim oBld Set oBld = oMng.NewBSONObjBuilder '' set data oBld "title", "ナチュラルスタイル" oBld "age", 8 oBld "nsware", Array("Nmageman", "Guideman", "Nasp") '' get BSONObj Dim o Set o = oBld.Obj '' show JSON text W o.JSONString '' or o.J W "" End Sub '' '' VBScript のデータを COMオブジェクト経由で BSON に変換 '' Sub ToBSON W "==== ToBSON ====" '' BSONObjBuilder Dim oBld Set oBld = oMng.NewBSONObjBuilder '' set data oBld "title", "ナチュラルスタイル" oBld "age", 8 oBld "nsware", Array("Nmageman", "Guideman", "Nasp") '' get BSONObj Dim o Set o = oBld.Obj '' get BSON binary Dim b b = o.BSONData '' or o.B '' show Base64 encoded BSON binary W "LenB: " & LenB(b) W oMng.Base64Encode(b) W "" End Sub

demo_mongo.vbs

'' '' MongoDB に問い合わせ '' Sub Query Dim oConn Set oConn = oMng.NewScopedDBConnection( cHostAndPort ) Dim oCursor Set oCursor = oConn.Query( "ec.member", oMng.FJ("{}") ) ' Set oCursor = oConn.Query( "ec.member", oMng.FJ("{ ""age"": 37 }") ) ' Set oCursor = oConn.Query( "ec.member", oMng.FJ("{}"), 0, 0, oMng.FJ("{""_id"": false, ""mname"": true, ""sex"": true }") ) Dim o Do While oCursor.More Set o = oCursor.Next W "mname: " & o("mname") W "sex: " & o("sex") W "dept: " & o("dept") W "age: " & o("age") W "" Loop Set oConn = Nothing End Sub '' '' MongoDB に新規追加 '' Sub Insert Dim oConn Set oConn = oMng.NewScopedDBConnection( cHostAndPort ) oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""みつを"", ""sex"": ""m"", ""dept"": ""zozo"", ""age"": 36 }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""A."", ""sex"": ""m"", ""dept"": ""zozo"", ""age"": 37 }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""YRM"", ""sex"": ""m"", ""dept"": ""ceo"", ""age"": 37 }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""ボカロ"", ""sex"": ""m"", ""dept"": ""mini4"", ""age"": 27 }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""ラリホー"", ""sex"": ""f"", ""dept"": ""mini4"", ""age"": null }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""サマンサ"", ""sex"": ""f"", ""dept"": ""mini4"", ""age"": null }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""官能"", ""sex"": ""m"", ""dept"": ""mini4"", ""age"": null }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""ファン"", ""sex"": ""m"", ""dept"": ""tem"", ""age"": 36 }") oConn.Insert "ec.member", oMng.FJ("{ ""mname"": ""チャンフー"", ""sex"": ""f"", ""dept"": ""tem"", ""age"": null }") Set oConn = Nothing End Sub '' '' MongoDB の既存データを更新 '' Sub Update Dim oConn Set oConn = oMng.NewScopedDBConnection( cHostAndPort ) '' m -> male '' f -> female oConn.Update "ec.member", oMng.FJ("{""sex"": ""m""}"), oMng.FJ("{""$set"": {""sex"": ""male""} }"), False, True oConn.Update "ec.member", oMng.FJ("{""sex"": ""f""}"), oMng.FJ("{""$set"": {""sex"": ""female""} }"), False, True Set oConn = Nothing End Sub '' '' MongoDB の既存データを消去 '' Sub Remove Dim oConn Set oConn = oMng.NewScopedDBConnection( cHostAndPort ) '' male を全員削除 oConn.Remove "ec.member", oMng.FJ("{""sex"": ""male""}") ' oConn.Remove "ec.member", oMng.FJ("{}") Set oConn = Nothing End Sub '' '' MongoDB にコマンドを投げる '' Sub RunCommand Dim oConn Set oConn = oMng.NewScopedDBConnection( cHostAndPort ) '' データベース一覧 Dim oInfo Set oInfo = oConn.RunCommand( "admin", oMng.FJ("{ ""listDatabases"": 1 }") ) Set oConn = Nothing W oInfo.J(0, True) End Sub

動作環境

Windows 2000, XP, 2003 Server, Vista, Server 2008, 7 and later

パッケージ内容
MongoCOM.dll
MongoCOMライブラリ本体
注意事項
  1. 本ソフトウェアの利用は良識の範囲内でお願い致します。
  2. 本ソフトウェアの利用による損害の保証はお受けできません。
  3. 本ソフトウェアの利用は楽しんで行っていただきますようお願い致します。
インストール方法
  1. "MongoCOM.dll" をRegsvr32。
リファレンス
[ New Color ] [ Update Color ]
MongoCOM Library
Mongo
Interface
IMongo
ProgID
NAS.Mongo
IMongo

他のオブジェクトのファクトリとして提供されるインターフェースです。
CreateObjectして取得します。ex) Set oMng = CreateObject("NAS.Mongo")

いくつかのユーティリティメソッドも提供します。

メソッド
IBSONObj* FromJSONString( String code )
code
JSON文字列。

JSON文字列を解析してBSONObjを生成します。

IBSONObj* FromBSONData( Byte[] data )
data
BSONデータ(バイナリ)。

BSONデータを解析してBSONObjを生成します。

IOID* NewOID( String id )
id
idの文字列。24桁の16進数文字列である必要があります。
idの文字列からOIDを生成します

IBSONObjBuilder* NewBSONObjBuilder()

BSONObjBuilderを生成します。

IScopedDbConnection* NewScopedDbConnection( String hostAndPort = "" )
hostAndPort
接続先のMongoDBのホスト名とポート番号。 ex) localhost:11111

ScopedDbConnectionを生成します。
hostAndPort を指定すると、接続済みのオブジェクトを返します。

String Base64Encode( Byte[] data )
data
エンコードするバイナリデータ。

バイナリデータをBase64文字列にエンコードします。

Byte[] Base64Decode( String src )
src
デコードする文字列。

Base64文字列をデコードし、バイナリデータを得ます。

String EscapeJSONString( String src )
src
エスケープする文字列。

JSONの文字列で使用できない文字をエスケープします。

IBSONObj* FJ( String code )

FromJSONStringのエイリアス。

IBSONObj* FB( Byte[] data )

FromBSONDataのエイリアス。

String E( String src )

EscapeJSONStringのエイリアス。

IOID

mongo::OID のCOMラッパーを提供します。

プロパティ
String Str [R]
idの文字列。24桁の16進数文字列です。
メソッド
void Init( String id )
id
idの文字列。24桁の16進数文字列である必要があります。

OIDのidの文字列を設定します。

IBSONElement

BSONデータ内の一項目を表します。key-valueペアです。
mongo::BSONElement のCOMラッパーを提供します。

プロパティ
VARIANT Val [R]
Type() が、1, 2, 3, 4, 6, 8, 9, 10, 16, 18 のとき、
データを該当するCOMの型で返します。
メソッド
int Type()

データの型を返します。

0: EOO
1: NumberDouble
2: String
3: Object
4: Array
5: BinData
6: Undefined
7: jstOID
8: Bool
9: Date
10: jstNULL
11: RegEx
12: DBRef
13: Code
14: Symbol
15: CodeWScope
16: NumberInt
17: Timestamp
18: NumberLong

String FieldName()

項目名を返します。

Byte[] BinData()

Type() = 5 のとき、バイナリデータ本体を返します。

int BinDataType()

Type() = 5 のとき、バイナリデータのsubtypeを返します。

IOID* OID()

Type() = 7 のとき、OIDを返します。

String Regex()

Type() = 11 のとき、正規表現本体を返します。

String RegexFlags()

Type() = 11 のとき、正規表現のオプションを返します。

String DBRefNS()

Type() = 12 のとき、DB参照の名前空間を返します。

IOID* DBRefOID()

Type() = 12 のとき、DB参照のOIDを返します。

String Code()

Type() = 13 のとき、コードの文字列を返します。

String Symbol()

Type() = 14 のとき、シンボルの文字列を返します。

String CodeWScopeCode()

Type() = 15 のとき、スコープ付コードのコード本体を返します。

IBSONObj* CodeWScopeObject()

Type() = 15 のとき、スコープ付コードのスコープオブジェクトを返します。

DATE TimestampTime()

Type() = 17 のとき、タイムスタンプの日付部分を返します。

uint TimestampInc()

Type() = 17 のとき、タイムスタンプの更新シリアル部分を返します。

IBSONObj

BSONデータを表します。1つ以上のBSONElementを包含します。
mongo::BSONObj のCOMラッパーを提供します。

メソッド
Bool CouldBeArray()

このオブジェクトが配列としても扱えるか。

IBSONElement* GetField(String key)
key
項目名。

項目名を指定してBSONElementを得ます。

IBSONElement* GetField(int key)
key
項目番号。

CouldBeArray() が真のとき、
項目番号を指定してBSONElementを得ます。

Bool HasField( String key )
key
項目名。

項目が存在するとき真を返します。

Bool HasField( int key )
key
項目番号。

CouldBeArray() が真のとき、
項目番号が存在するとき真を返します。

int NFields()

BSONデータ内の項目の数を返します。

IBSONElement[] GetFields()

BSONデータ内のすべての項目をBSONElementの配列で返します。

String[] GetFieldNames()

BSONデータ内のすべての項目名を文字列の配列で返します。

String JSONString( int format = 0, Bool pretty = False )
format
JSONのフォーマット。

0: RFC準拠(Strict)
1: 10genフォーマット(TenGen)
2: JavaScript互換(JS)
pretty
真のとき、人間が読みやすいように改行やスペースを入れます。

このオブジェクトのJSON表現を得ます(文字列)。

Byte[] BSONData()

このオブジェクトのBSON表現を得ます(バイナリ)。

String J( int format = 0, Bool pretty = False )

JSONStringのエイリアス。

Byte[] B()

BSONDataのエイリアス。

IBSONObjBuilder

BSONObjのビルダーを表します。
mongo::BSONObjBuilder のCOMラッパーを提供します。

メソッド
Bool IsValid()

オブジェクト生成されてから、Obj()を呼び出したことがない場合真を返します。
BSONObjBuilderは使い捨てのため、何度もObj()を呼び出すことはできません。

void Append( String key, VARIANT data )
key
項目名。
data
データ。

BSONObjに出力したい項目を追加します。
下記の型のデータに対応しています。

  • null
  • empty
  • 8bit signed int
  • 16bit signed int
  • 32bit signed int
  • 64bit signed int
  • 8bit unsigned int
  • 16bit unsigned int
  • 32bit unsigned int
  • single
  • double
  • boolean
  • currency
  • date
  • String
  • IBSONObj
  • 上記データ型の配列

IBSONObj* Obj()

追加された項目からBSONObjを生成します。

void AppendBinData( String key, Byte[] data, int type )
key
項目名。
data
バイナリデータ本体。
type
バイナリデータのsubtype。

バイナリデータを追加します。

void AppendOID( String key, IOID* pOID )
key
項目名。
pOID
OID。

OIDを追加します。

void AppendRegex( String key, String pattern, String flags )
key
項目名。
pattern
正規表現本体。
flags
正規表現のオプション。

正規表現を追加します。

void AppendDBRef( String key, String ns, IOID* pOID )
key
項目名。
ns
DB参照の名前空間。
pOID
DB参照のOID。

DB参照を追加します。

void AppendCode( String key, String code )
key
項目名。
code
コードの文字列。

コードを追加します。

void AppendSymbol( String key, String symbol )
key
項目名。
symbol
シンボルの文字列。

シンボルを追加します。

void AppendCodeWScope( String key, String code, IBSONObj* pObj )
key
項目名。
code
スコープ付コードのコード本体。
pObj
スコープ付コードのスコープオブジェクト。

スコープ付コードを追加します。

void AppendTimestamp( String key, DATE time, uint inc )
key
項目名。
time
タイムスタンプの日付部分。
inc
タイムスタンプの更新シリアル部分。

タイムスタンプを追加します。

IDBClientCursor

MongoDBへの問い合わせの結果を保持するカーソルを表します。
mongo::DBClientCursor のCOMラッパーを提供します。

メソッド
Bool More()

カーソルが末尾を指していないとき、真を返します。

IBSONObj* Next()

カーソルをひとつ進め、参照先のBSONObjを返します。

int ItCount()

カーソル内のBSONObjの数を返します。
使用後はカーソルが末尾に移動します。

IScopedDbConnection

MongoDBへの接続を表します。コネクションプール対応です。
mongo::ScopedDbConnection のCOMラッパーを提供します。

メソッド
void Connect( String hostAndPort )
hostAndPort
接続先のMongoDBのホスト名とポート番号。 ex) localhost:11111

hostAndPortで指定したMongoDBに接続します。
すでに接続済みの場合はエラーになります。

void Insert( String collection, IBSONObj* pObj )
collection
操作するMongoDBのコレクション。
pObj
追加するデータのBSONObj。

MongoDBにデータを追加します。

void Remove( String collection, IBSONObj* pQuery, Bool justOne = False )
collection
操作するMongoDBのコレクション。
pQuery
削除対象を表すBSONObj。
justOne
真のとき、対象のうち一件のみ削除します。

MongoDBからデータを削除します。

void Update( String collection, IBSONObj* pQuery, IBSONObj* pObj, Bool upsert = False, Bool multi = False )
collection
操作するMongoDBのコレクション。
pQuery
更新対象を表すBSONObj。
pObj
更新内容を表すBSONObj。
upsert
真のとき、更新対象が存在しないときInsertします。
multi
真のとき、複数件の対象を一括更新します。

MongoDBのデータを更新します。

IDBClientCursor* Query( String collection, IBSONObj* pQuery, int toReturn = 0, int toSkip = 0, IBSONObj* pFieldsToReturn = NULL )
collection
操作するMongoDBのコレクション。
pQuery
問い合わせ対象を表すBSONObj。
toReturn
指定すると、この件数までの結果を返します。
toSkip
指定すると、この件数を飛ばした結果を返します。
pFieldsToReturn
結果に含める項目を表すBSONObj。

MongoDBにデータを問い合わせます。

IBSONObj* RunCommand( String collection, IBSONObj* pCommand )
collection
操作するMongoDBのコレクション。
pCommand
コマンドを表すBSONObj。

MongoDBにコマンドを投入し、結果をBSONObjで返します。

更新履歴
2014/06/11
  • Version: 1.1.1.0