作者回复: remove是mongo shell下的命令。deleteOne deleteMany是程序语言下的API。做的是类似的事情。
作者回复: 数据格式转换是4.0才开始支持的功能,本质上所有的转换都可以用`$convert`完成,但是转换为不同的数据类型时又有不同的简化版本。例如`$toInt`,`$toBool`,`$toDate`等。以下以使用最`$toDate`为例举例说明使用方式:
```javascript
// 测试数据
db.convertTest.insertMany([{
date: new Date().getTime()
}, {
date: new Date().getTime() - 3600000
}, {
date: new Date().getTime() - 7200000
}]);
```
在`$project`中直接使用`$toDate`即可将epoch时间转换为日期类型:
```javascript
db.convertTest.aggregate([{
$project: {
date: {
$toDate: "$date"
}
}
}]);
```
参考:
- `$convert`: https://docs.mongodb.com/manual/reference/operator/aggregation/convert/
- `$toInt`: https://docs.mongodb.com/manual/reference/operator/aggregation/toInt/
- `$toBool`: https://docs.mongodb.com/manual/reference/operator/aggregation/toBool/
- `$toDate`: https://docs.mongodb.com/manual/reference/operator/aggregation/toDate/
作者回复: $elemMatch表示一个数组元素同时满足两个条件
分开写表示一个元素满足一个条件,另一个元素满足另一个条件也算数
举例来说:
db.test.insert({array: [{a: 1, b: 1}, {a: 2, b: 2}]})
db.test.find({"array.a": 1, "array.b": 2}); // 有结果,因为一个元素满足了a=1,另一个元素满足了b=2
db.test.find({array: {$elemMatch: {a: 1, b: 2}}}); // 没有结果,因为没有一个元素同时满足a=1并且b=2
作者回复: mongodb有类似的oplog。但是那个要求你对全量的oplog都要保存,才能够从oplog里完全恢复被误删的表。
作者回复: 在使用MMAP引擎的时候删除集合不会回收存储空间。在WiredTiger引擎是直接回收存储空间的。 你可以在shell下面再尝试下这个操作看看是否robo 3t相关。
作者回复: 关于1)比较难以判断实际情况。
2)
首先要把mongodb安装成service,参考Redhat的安装:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
然后用chkconfig命令启用开机自启动,这里有教程:
https://blog.csdn.net/u013554213/article/details/78792686
分布式环境下也是一样。如果你是说希望有那种中央化的管控,那你可以使用OpsManager,可以通过GUI对全部节点进行起停控制,并且是会在服务器宕机时候自动重启服务。
作者回复: 简单来说,wildcard index对于下面这样的结构:
{
"_id" : 1,
"data" : {
"a" : 1728,
"b" : 6740,
"c" : 6481,
"d" : 2066,
"e" : 3173
}
}
可以一条命令(一个索引)同时对a/b/c/d/e 5个字段做索引
db.wildcardIndex.createIndex({"data.$**":1});
甚至你将来在这个子文档里增加新的字段,也会自动索引。这样省去你单独创建很多个索引。
但是。。。性能上有人测试过,这种比单独建每个索引还是要更加耗资源,差不多是两倍。 所以方便的代价是资源的更多消耗
作者回复: 没错,lt/gt用到索引的话就是在B树的叶子层进行遍历
作者回复: 这个表示查找一个JSON文档,这个文档有一个字段叫做 from, 并且 from字段的内容就是 {country: "China"} ,不多也不少。
作者回复: 你是不是要这个:
db.orders.find({
"orderLines": {
$elemMatch: {
"sku": "1400",
"qty": 62
}
}
}, {
"_id": 0,
"orderLines.$": 1
})
作者回复: 请把问题描述清楚。