2016
06
29
06
29
主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2" />
<add key="NuGet" value="https://nuget.org/api/v2/" />
<add key="Roslyn" value="https://www.myget.org/F/roslyn-nightly/" />
<add key="DotNet" value="https://www.myget.org/F/dotnet-corefx/" />
</packageSources>
</configuration>
using Couchbase.Lite;
using Newtonsoft.Json.Linq;
var dirInfo = new System.IO.DirectoryInfo(System.IO.Directory.GetCurrentDirectory());
var manager = new Manager(dirInfo, ManagerOptions.Default);
var db = manager.GetDatabase("foo");
if (db == null)
{
throw new Exception("Cannot create database.");
}
class Album
{
public string AlbumTitle { get; set; }
public string Artist { get; set; }
public List<string> TrackTitles { get; set; }
public int? Year { get; set; }
public static Album FromJson(string jsonstr)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<Album>(jsonstr);
}
public Dictionary<string, Object> GetDict()
{
var dict = new Dictionary<string, dynamic>() {
{"AlbumTitle", AlbumTitle},
{"Artist", Artist},
{"TrackTitles", TrackTitles},
{"Year", Year},
};
return dict;
}
}
var album1 = new Album()
{
AlbumTitle = "album1",
Artist = "artist1",
TrackTitles = new List<string> {"t1", "t2", "t3"},
Year = 2010
};
var album2 = new Album()
{
AlbumTitle = "album2",
Artist = "artist2",
TrackTitles = new List<string> { "t1", "t2", "t3", "t4", "t5" },
Year = 2005
};
var album3 = new Album()
{
AlbumTitle = "album3",
Artist = "artist1",
TrackTitles = new List<string> { "r1" },
Year = null
};
var albums = new List<Album> { album1, album2, album3 };
foreach (var album in albums)
{
var document = db.CreateDocument();
document.Id = album.Artist + " " + album.AlbumTitle;
var albumDict = album.GetDict();
albumDict["updated_at"] = DateTime.Now;
var properties = albumDict;
var rev = document.PutProperties(properties);
Console.WriteLine(rev);
}
var view = db.GetView("all");
if (view != null)
{
view.SetMap((doc, emit) =>
{
emit(doc["AlbumTitle"], doc);
}, "ver1");
}
var vQuery = db.GetView("all").CreateQuery();
docs = vQuery.Run();
Console.WriteLine("no filter: " + docs.Count);
foreach (var doc in docs)
{
var album = Album.FromJson(doc.Value.ToString());
Console.WriteLine(album.AlbumTitle);
}
var view3 = db.GetView("TrackTitleFilter");
if (view3 != null)
{
view3.SetMap((doc, emit) =>
{
var titles = ((JArray)doc["TrackTitles"]).ToArray();
if (titles.Contains("t1"))
{
emit(doc["AlbumTitle"], doc);
}
}, "ver1");
}
var vQuery = db.GetView("TrackTitleFilter").CreateQuery();
docs = vQuery.Run();
Console.WriteLine("TrackTitle filter: " + docs.Count);
[Table("Album")]
class Album
{
[PrimaryKey]
public string AlbumID { get; set; }
public string Title { get; set; }
public string Artist { get; set; }
public int Length { get; set; }
public string _TrackPaths { get; private set; }
public string _Titles { get; private set; }
public DateTime Added { get; set; }
[Ignore]
public List<string> TrackPaths
{
get
{
var ja = JsonArray.Parse(_TrackPaths);
return (from a in ja.GetArray()
select a.GetString()).ToList();
}
set
{
var ja = new JsonArray();
foreach (var a in value)
{
ja.Add(JsonValue.CreateStringValue(a));
}
_TrackPaths = ja.Stringify();
}
}
[Ignore]
public List<string> Titles
{
get
{
var ja = JsonArray.Parse(_Titles);
return (from a in ja.GetArray()
select a.GetString()).ToList();
}
set
{
var ja = new JsonArray();
foreach (var a in value)
{
ja.Add(JsonValue.CreateStringValue(a));
}
_Titles = ja.Stringify();
}
}
}