万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Unity & MongoDB

Macでやりたいのでここからzipをダウンロードする。
http://driver-downloads.mongodb.org/dotnet/index.html

ちなみにこちらではgitとかから落とせる手順
http://docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/#csharp-driver-tutorial-downloading

公式: http://docs.mongodb.org/ecosystem/drivers/csharp/



→ おそらくUnityのではMonoのバージョンが古くて動かないっぽい。

・動かないというやりとり
URLその1: http://grokbase.com/p/gg/mongodb-csharp/131qh77maj/mongodb-user-re-were-planning-to-make-net-4-the-minimum-requirement-for-the-c-net-driver

URLその2: https://groups.google.com/forum/#!topic/mongodb-csharp/v5bR6bmXxGg

しかし、テキトーに探してると、「monodevelop-mongodb-provider」なるもの
こちらのはできた。
monodevelop-mongodb-providerのgithubのURL: https://github.com/schamane/monodevelop-mongodb-provider

・MongoDB.Bson.dll
・MongoDB.Driver.dll
をUnityのpluginsにぶっこむ。僕は「MongoDB」フォルダを生成してから行った。
「plugins/MongoDB」

この「けさらんぱさらん」というサイトを参考にした。
URL: http://d.hatena.ne.jp/cer1974/20120427/1335539220

・MongoDBTest.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

using System;
// MongoDB dll
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

public class MongoDBTest : MonoBehaviour
{
    // Use this for initialization
    void Start ()
    {
        // mongodb://[username:password@]hostname[:port][/[database][?options]]
        var server = MongoServer.Create ("mongodb://localhost");
        var db = server.GetDatabase ("mydb");
        var collection = db.GetCollection ("entities");
        var entry = new AddressEntry ()
        {
            Name = "Mr.name",
            Birthday = DateTime.Parse ("1964/02/03"),
            EmailAddrs = new List<Email> ()
            {
                new Email () { DisplayName = "momo",  MailAddress = "T.Sumomo@momo.com" },
                new Email () { DisplayName = "bono", MailAddress = "Bonobono@bono.jp" }
            }
        };
        collection.Insert (entry);
    }

    [BsonIgnoreExtraElements]
    public class AddressEntry
    {
        //[BsonId] ここをコメントアウトしないとIDが必至になってしまうのでコメントアウトした
        //public BsonObjectId _id { get; set; }

        public string Name { get; set; }

        public DateTime Birthday { get; set; }

        public List<Email> EmailAddrs { get; set; }
    }

    [BsonIgnoreExtraElements]
    public class Email
    {
        public string DisplayName { get; set; }

        public string MailAddress { get; set; }
    }
}

→ これを実行した。

・コンソールでの確認

& mongo
MongoDB shell version: 2.2.0
connecting to: test
> use mydb
switched to db mydb
> db.entities.find()
{ "_id" : ObjectId("51f87ed9f70ac5769e2683ad"), "Name" : "Mr.name", "Birthday" : ISODate("1964-02-02T15:00:00Z"), "EmailAddrs" : [ 	{ 	"DisplayName" : "momo", 	"MailAddress" : "T.Sumomo@momo.com" }, 	{ 	"DisplayName" : "bono", 	"MailAddress" : "Bonobono@bono.jp" } ] }

な感じになる。