powershell可以玩nosql数据库吗?答案是肯定的。只要这个数据库兼容.net,就可以很容易地被powershell使用。

发文初衷:世界上几乎没有讲powershell调用nosql的帖子,更没有讲powershell调用litedb的。只有寥寥powershell调用monodb的代码。

2017-10-08更新,文章和脚本支持litedb 4.0。有错误欢迎指正,谢谢。

powershell,nosql,litedb,bson,数据库,powershell传教士

---【存储格式】---

BSON是一种类似json的一种二进制形式的存储格式,简称Binary JSON。 它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

{"hello":"world"} 这是一个BSON的例子, 其中"hello"是键名,它一般是string类型, 后面的"world"是键值,它的类型一般是string,double,array,binarydata等类型。

bson存储记录的最大单位是Document,可以把这个Document理解为一条记录。

根据litedb手册中的说明,限制为: 每个数据库小于2GB;每个document小于1MB;

即 litedb---》表---》bson_Document---》bson_Document---》键值对

由于值可以是空,所以每个bson_Document最小必须含有一个键。如:{"aaa":""}

---【应用场景,重要!】---

下为个人整理的应用场合,如有不妥,请斧正。

1 单机,绿色,中小量数据。单个库总内容小于1.8GB。

2 类似于sqlite,但sqlite是sql数据库,这个是nosql。即键值对,即每个库中数据只有一列。 即nosql数据库不适合存储行列数据。但数组,哈希表,和之间对象转换比sql数据库方便。 查询数据不用sql语法用函数。

3 需要存储变量名,变量值,的应用。如拿litedb数据库当ini文件用,当xml文件用。

---【图形管理工具】---

https://github.com/falahati/LiteDBViewer
https://github.com/JosefNemec/LiteDbExplorer     推荐

---【下载安装】---

1 官网为:             http://www.litedb.org/

2 github地址为:       https://github.com/mbdavid/LiteDB/

---【常用对象列表】---

LiteDB.LiteDatabase

LiteDB.BsonDocument

LiteDB.BsonMapper    bson键值对<--->对象转换者类

LiteDB.JsonSerializer  bson键值对<--->json键值对转换类。

LiteDB.BsonArray    bson数组

LiteDB.BsonValue    bson值 布尔,日期,guid,object对象,bson值,字节数组,int32,int64,double,字符串,list,字典,等。

LiteDB.LiteFileStorage 存储文件

LiteDB.Query      查询类

---【常用函数列表】---

摘自 http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_LiteDB.html

------Query----- Query.All 返回所有的数据,可以使用指定的索引字段进行排序

Query.EQ 查找返回和指定字段值相等的数据

Query.LT/LTE 查找< 或 <= 某个值的数据

Query.GT/GTE 查找> 或 >= 某个值的数据

Query.Between 查找在指定区间范围内的数据

Query.In - 和SQL的in类似吧,查找和列表中值相等的数据

Query.Not - 和EQ相反,是不等于某个值的数据

Query.StartsWith 查找以某个字符串开头的数据

Query.Contains 查找包括某个字符串的数据,这个查询只扫描索引

Query.And 2个查询的交集

Query.Or 2个查询结果的并集

------linq-----

FindAll: 查找表或者集合中所有的结果记录

FindOne:返回第一个或者默认的结果

FindById: 通过索引返回单个结果

Find: 使用查询表达式或者linq表达式查询返回结果

Count() , Exists(),Min() , Max()

---【例子,重要!】---

简单来说就是用字符串,日期等,构造键值对。用n个键值对组成bson_Document,然后增删查改这个bson_Document。

下列脚本 win10 + powershell 5.1  + litedb 4.0 测试通过。

  1. # powershell_for_litedb v4.0 2017-10-08
  2. $script:脚本存储路径 = Split-Path -Parent $myinvocation.mycommand.path
  3. $Env:Path += ";$script:脚本存储路径;"
  4.  
  5. $script:数据库客户端目录 = $script:脚本存储路径
  6. $script:数据库客户端文件名 = 'LiteDB.dll'
  7. $script:数据库客户端绝对文件名 = $script:数据库客户端目录 + '\' + $script:数据库客户端文件名
  8.  
  9. $script:数据库文件名 = 'test001.db'
  10. $script:数据库绝对文件名 = $script:数据库客户端目录 + '\' + $script:数据库文件名
  11.  
  12. if (test-path $script:数据库客户端绝对文件名)
  13. {
  14. try
  15. {
  16. Add-Type -LiteralPath $script:数据库客户端绝对文件名
  17. write-host "---LiteDB程序载入完成---"
  18. }
  19. catch [Exception]
  20. {
  21. $error[0].Exception.LoaderExceptions
  22. Write-Error "加载 $script:数据库客户端文件名 出错!"
  23. exit 2
  24. }
  25. }
  26. else
  27. {
  28. Write-Error "找不到 $script:数据库客户端文件名 !"
  29. exit 1
  30. }
  31.  
  32. $数据库001 = [LiteDB.LiteDatabase]::new($script:数据库绝对文件名)
  33. [string]$查询表名 = $数据库001.GetCollectionNames()
  34. if ($查询表名 -eq "")
  35. {
  36. write-host "空数据库,无表"
  37. }
  38. else
  39. {
  40. $查询表名
  41. }
  42.  
  43. #打开表,没有的话新建表
  44. $001 = $数据库001.GetCollection("aaaa")
  45. #$查询结果 = $表001.findall()
  46. #$查询结果
  47.  
  48. # ---------------插入-----------------
  49. $字符串 = 'aa'
  50. $数字 = 123
  51. $日期 = get-date
  52. $真假 = $true
  53. $数组 = "a","","kkk"
  54.  
  55. $哈希表2 = @{
  56. name = $字符串;
  57. age = $数字 ;
  58. bron = $日期 ;
  59. sex = $真假 ;
  60. array = $数组;
  61. 嘻嘻 = '哈哈'
  62. }
  63.  
  64. $json_哈希表2 = ConvertTo-Json -InputObject $哈希表2
  65. $bson_哈希表2 = [LiteDB.JsonSerializer]::Deserialize($json_哈希表2)
  66. $bson_哈希表2["_id"] = [LiteDB.ObjectId]::NewObjectId() #必须给bson_document,建一个id。
  67.  
  68. $001.Insert($bson_哈希表2)
  69.  
  70. # -------------插入键值对-------------
  71. [LiteDB.BsonValue]$2 = 'powershell 传教士 原创文章 2017-10-08,允许转载,但必须保留名字和出处,否则追究法律责任传教士。初稿,有错误欢迎指正,谢谢。'
  72. $2 = '声明'
  73. $bson_Document = [LiteDB.BsonDocument]::new()
  74. $bson_Document["_id"] = [LiteDB.ObjectId]::NewObjectId()
  75. $null = $bson_Document.add($2,$2)
  76. $001.Insert($bson_Document)
  77.  
  78. #------------------查询--------------------
  79. #查询必须输入键名,键值作为参数。
  80. #返回的都是bson_Document,转换成json,再转换成哈希表对象。再取值。
  81. $查询结果1 = $001.find([LiteDB.query]::eq("name","aa"))
  82. "---1---"
  83. $查询结果1
  84.  
  85. $查询结果2 = $001.find([LiteDB.query]::gt("age",""))
  86. "---2---"
  87. $查询结果2
  88.  
  89. $查询结果3 = $001.find([LiteDB.query]::StartsWith("嘻嘻","哈"))
  90. "---3---"
  91. $查询结果3

DotNet开源大本营  写的两篇 litedb的介绍帖子

.NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

.NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程

powershell玩转litedb数据库的更多相关文章

  1. powershell玩转litedb数据库-第二版

    powershell可以玩nosql数据库吗?答案是肯定的.只要这个数据库兼容.net,就可以很容易地被powershell使用. 发文初衷:世界上几乎没有讲powershell调用nosql的帖子, ...

  2. powershell玩转sqlite数据库

    脚本经常需要处理文本,有时候是行列整齐文本.那么powershell脚本处理行列文本有几种方法呢?一种是excel,另外的一些是?access?sqlite? sqlite是一个很小巧的,很方便嵌入到 ...

  3. powershell玩转SQL SERVER所有版本

    微软发布了最新的powershell for sql server 2016命令行客户端库.文章介绍了与之相关的实用方法. powershell 传教士 原创文章 2016-06-05, 2016-1 ...

  4. powershell玩转xml之20问

    powershell玩转xml之20问 powershell 传教士 原创文章 2014-01-30,2015-10-27改 允许转载,但必须保留名字和出处,否则追究法律责任 问:xml文件编码情况如 ...

  5. 【转】PowerShell 连接SQL Server 数据库 - ADO.NET

    转至:http://www.pstips.net/connect-sql-database.html PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整 ...

  6. powershell玩转iis网站服务器

    1 ------------安装------------------ for win7,win8,win8.1,win10控制面板--->程序和功能--->开启关闭windows功能--- ...

  7. 新霸哥带你轻松玩转Oracle数据库

    接触过软件开发的朋友可能都会知道oracle,在开发的过程中,数据存储都可能会用到oracle的,因为oracle具有处理速度快,安全级别特别的高.但是有一个缺点就是比较的贵,只有一个大型的公司才有可 ...

  8. LiteDB源码解析系列(2)数据库页详解

    在这一篇里,我将用图文的方式展示LiteDB中页的结构及作用,内容都是原创,在描述的过程中有不准确的地方烦请指出. 1.LiteDB页的技术工作原理 LiteDB虽然是单个文件类型的数据库,但是数据库 ...

  9. 分享一个LiteDB做的简单考试系统辅助工具

    凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...

随机推荐

  1. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  2. 转:如何学习SQL(第二部分:从关系角度理解SQL)

    转自:http://blog.163.com/mig3719@126/blog/static/285720652010950825538/ 6. 从关系角度理解SQL 6.1. 关系和表 众所周知,我 ...

  3. js到处excel

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. 由函数clock想到的

    今天介绍一下clock这个函数的使用,它是C标准库的一部分,声明在头文件<time.h>中,返回处理器使用的时间值,函数声明为: clock_t clock(void); 这个函数看起来很 ...

  5. 栅栏 CyclicBarrier

    java.util.concurrent.CyclicBarrier 类是一种同步机制,它能够对处理一些算法的线程实现同步.换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这里,然后 ...

  6. Wifi-Direct

    参考链接:http://developer.android.com/guide/topics/connectivity/wifip2p.html 国内镜像开发文档:http://wear.techbr ...

  7. text-overflow:ellipsis实现超出隐藏时省略号显示

    text-overflow:ellipsis;要达到的效果是:文字超出容器宽度时,文字被隐藏的文字用省略号代替.所以该属性只能用于块状元素或行内块元素中,对行内元素是不起作用的. 一般和white-s ...

  8. Vim学习指南

    你想尽可能快地自学vim(为大家所熟知的最好的编辑器) .这是我学习的方法:从细处入手然后慢慢掌握所有技巧. Vim 六十亿美元的编辑器 设计优良,强壮,快速. 学习vim并把它作为你的下一个文本编辑 ...

  9. (17)odoo方法和修饰器

    ---------------------更新时间:11:06 2016-09-27 星期二18:06 2016-09-18 星期日10:31 2016-03-01 星期二-------------- ...

  10. (02)odoo自定义模块

    * 官方建议模块骨架    --------------------------    addons/<my_module_name>/                 │─ __init ...