javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

如何关闭mongodb python连接?

我正在做一个将一些数据写入mongodb的python脚本。完成后,我需要关闭连接并释放一些资源。

用Python如何完成?

trans by 2020-08-12T05:24:16Z

选择MongoDb / CouchDb / RavenDb-性能和可扩展性advi

我们正在为某些读/写密集型应用程序寻找一种具有故障转移群集功能的文档数据库存储解决方案。

我们将平均每秒向数据库写入40K并发写入(在此期间峰值可以达到70,000)-并且可能发生几乎类似的读取次数。

我们还需要数据库通知新写入记录的机制(某种在数据库级别的触发器)。

在正确选择文档数据库和相关容量规划方面,什么是一个好的选择?

更新

关于期望的更多细节。

  • 平均而言,我们期望在3-4个数据库/文档集合中每秒插入(新文档)40,000(40K)。
  • 峰值可能达到120,000(120K)
  • 插入内容应立即可读-几乎实时
  • 与此相伴,我们期望每秒大约有5000次更新或删除
  • 同时,我们还期望500-600个并发查询可以访问数据。 这些查询和执行计划有些已知,尽管可能必须每周(例如)更新一次。
  • 系统应在存储侧支持故障转移群集
trans by 2020-08-11T20:27:02Z

MongoDB:糟糕的MapReduce性能

我在关系数据库方面拥有悠久的历史,但是我是MongoDB和MapReduce的新手,所以我几乎肯定我一定在做错事。 我将直接进入这个问题。 很抱歉,如果很长。

我在MySQL中有一个数据库表,该表跟踪每天的成员个人资料视图数量。 为了进行测试,它具有10,000,000行。

CREATE TABLE `profile_views` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  `day` date NOT NULL,
  `views` int(10) unsigned default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`,`day`),
  KEY `day` (`day`)
) ENGINE=InnoDB;

典型数据可能如下所示。

+--------+----------+------------+------+
| id     | username | day        | hits |
+--------+----------+------------+------+
| 650001 | Joe      | 2010-07-10 |    1 |
| 650002 | Jane     | 2010-07-10 |    2 |
| 650003 | Jack     | 2010-07-10 |    3 |
| 650004 | Jerry    | 2010-07-10 |    4 |
+--------+----------+------------+------+

我使用此查询来获取自2010年7月16日以来访问量最高的5个个人资料。

SELECT username, SUM(hits)
FROM profile_views
WHERE day > '2010-07-16'
GROUP BY username
ORDER BY hits DESC
LIMIT 5\G

此查询将在一分钟内完成。 不错!

现在进入MongoDB的世界。 我使用3台服务器设置了分片环境。 服务器M,S1和S2。 我使用以下命令来设置绑定(注意:我已经遮盖了IP addy)。

S1 => 127.20.90.1
./mongod --fork --shardsvr --port 10000 --dbpath=/data/db --logpath=/data/log

S2 => 127.20.90.7
./mongod --fork --shardsvr --port 10000 --dbpath=/data/db --logpath=/data/log

M => 127.20.4.1
./mongod --fork --configsvr --dbpath=/data/db --logpath=/data/log
./mongos --fork --configdb 127.20.4.1 --chunkSize 1 --logpath=/data/slog

一旦启动并运行它们,我就跳上服务器M,并启动了mongo。 我发出了以下命令:

use admin
db.runCommand( { addshard : "127.20.90.1:10000", name: "M1" } );
db.runCommand( { addshard : "127.20.90.7:10000", name: "M2" } );
db.runCommand( { enablesharding : "profiles" } );
db.runCommand( { shardcollection : "profiles.views", key : {day : 1} } );
use profiles
db.views.ensureIndex({ hits: -1 });

然后,我从MySQL导入了同样的10,000,000行,这给了我如下所示的文档:

{
    "_id" : ObjectId("4cb8fc285582125055295600"),
    "username" : "Joe",
    "day" : "Fri May 21 2010 00:00:00 GMT-0400 (EDT)",
    "hits" : 16
}

现在是真正的肉和土豆了……我的地图和简化功能。 回到外壳中的服务器M上,我设置查询并像这样执行它。

use profiles;
var start = new Date(2010, 7, 16);
var map = function() {
    emit(this.username, this.hits);
}
var reduce = function(key, values) {
    var sum = 0;
    for(var i in values) sum += values[i];
    return sum;
}
res = db.views.mapReduce(
    map,
    reduce,
    {
        query : { day: { $gt: start }}
    }
);

这就是我遇到的问题。 此查询耗时超过15分钟完成! MySQL查询用了不到一分钟的时间。 这是输出:

{
        "result" : "tmp.mr.mapreduce_1287207199_6",
        "shardCounts" : {
                "127.20.90.7:10000" : {
                        "input" : 4917653,
                        "emit" : 4917653,
                        "output" : 1105648
                },
                "127.20.90.1:10000" : {
                        "input" : 5082347,
                        "emit" : 5082347,
                        "output" : 1150547
                }
        },
        "counts" : {
                "emit" : NumberLong(10000000),
                "input" : NumberLong(10000000),
                "output" : NumberLong(2256195)
        },
        "ok" : 1,
        "timeMillis" : 811207,
        "timing" : {
                "shards" : 651467,
                "final" : 159740
        },
}

不仅要花很长时间才能运行,而且结果甚至看起来都不正确。

db[res.result].find().sort({ hits: -1 }).limit(5);
{ "_id" : "Joe", "value" : 128 }
{ "_id" : "Jane", "value" : 2 }
{ "_id" : "Jerry", "value" : 2 }
{ "_id" : "Jack", "value" : 2 }
{ "_id" : "Jessy", "value" : 3 }

我知道这些值应该更高。

我对整个MapReduce范式的理解是执行此查询的任务应该在所有分片成员之间分配,这应该提高性能。 我等到Mongo在导入后完成了在两个分片服务器之间分发文档的工作。 当我开始此查询时,每个文档都几乎有5,000,000个文档。

所以我一定做错了。 谁能给我任何指示?

编辑:IRC上有人提到在日字段中添加索引,但据我所知,它是由MongoDB自动完成的。

trans by 2020-08-11T16:07:32Z

.net-如何使用官方C#驱动程序在MongoDB中使用Update.Set更新多个字段?

以下代码将允许我更新FirstName =“ john”和LastName =“ Doe”的电子邮件。 如何不使用Save()方法更新电子邮件和电话?

MongoDB.Driver.MongoServer _server = MongoDB.Driver.MongoServer.Create("mongodb://localhost");
MongoDB.Driver.MongoDatabase _dataBase = _server.GetDatabase("test");
MongoDB.Driver.MongoCollection<Person> _person = _dataBase.GetCollection<Person>("person");

//Creat new person and insert it into collection
ObjectId newId  = ObjectId.GenerateNewId();
Person newPerson = new Person();
newPerson.Id = newId.ToString();
newPerson.FirstName = "John";
newPerson.LastName = "Doe";
newPerson.Email = "john.doe@gmail.com";
newPerson.Phone = "8005551222";
_person.Insert(newPerson);

//Update phone and email for all record with firstname john and lastname doe
MongoDB.Driver.Builders.QueryComplete myQuery = MongoDB.Driver.Builders.Query.And(MongoDB.Driver.Builders.Query.EQ("FirstName", "John"),    MongoDB.Driver.Builders.Query.EQ("LastName", "Doe"));
MongoDB.Driver.Builders.UpdateBuilder update = MongoDB.Driver.Builders.Update.Set("Email", "jdoe@gmail.com");

_person.Update(myQuery, update);
trans by 2020-08-11T00:22:24Z

mongodb-mongorestore失败:没有可访问的服务器

我试图从转储中还原mongo,但失败了:

mongorestore --port 27133 dump
2015-05-07T09:39:11.760+0300    Failed: no reachable servers

尽管我可以毫无问题地连接到它:

$ mongo --port 27133
MongoDB shell version: 3.0.1
connecting to: 127.0.0.1:27133/test

在日志文件中没有什么特别的:

2015-05-07T09:37:00.350+0300 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:44901 #1 (1 connection now open)
2015-05-07T09:37:13.935+0300 I NETWORK  [conn1] end connection 127.0.0.1:44901 (0 connections now open)
2015-05-07T09:39:08.752+0300 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:44906 #2 (1 connection now open)
2015-05-07T09:39:11.763+0300 I NETWORK  [conn2] end connection 127.0.0.1:44906 (0 connections now open)
2015-05-07T09:39:52.365+0300 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:44907 #3 (1 connection now open)
2015-05-07T09:39:55.064+0300 I NETWORK  [conn3] end connection 127.0.0.1:44907 (0 connections now open)
2015-05-07T09:40:11.272+0300 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:44909 #4 (1 connection now open)
2015-05-07T09:40:14.281+0300 I NETWORK  [conn4] end connection 127.0.0.1:44909 (0 connections now open)

更新资料

主机0.0.0.0没有帮助

$ mongorestore --host=127.0.0.1 --port=27132 dump
2015-12-16T18:52:33.270+0300    Failed: no reachable servers

尽管我仍然可以使用0.0.0.0命令进行连接:

$ mongo --host=127.0.0.1 --port=27133
MongoDB shell version: 3.2.0
connecting to: 127.0.0.1:27133/test
> ^C
bye

主机0.0.0.0也没有帮助:

$ mongorestore --host=0.0.0.0 --port=27133 dump

我有3.2版本的MongoDb:

$ mongorestore --version
mongorestore version: 3.2.0-rc5
git version: 6186100ad0500c122a56f0a0e28ce1227ca4fc88
trans by 2020-08-10T12:50:23Z

node.js-MongoError:尝试删除集合时找不到ns

当我尝试删除集合时,猫鼬抛出错误,即“ MongoError:ns not found”。

这是我的猫鼬代码:

var mongoose = require('bluebird').promisifyAll(require('mongoose'));
......
......
......   
mongoose.connection.db.dropCollection("myCollection",function(err,affect){
   console.log('err',err);

})

错误:

错误{[MongoError:未找到ns]
名称:“ MongoError”,
讯息:'ns 未找到',
好的:0,
errmsg:“未找到ns”}

trans by 2020-08-10T08:15:26Z

mongodb-在旺中创建超级用户

我试图在mongo中创建一个可以在任何数据库中执行任何操作的用户。

根据该指南,我创建了一个新管理员:[http://docs.mongodb.org/manual/tutorial/add-user-administrator]

这是代码:

use admin
db.addUser( { user: "try1",
              pwd: "hello,
              roles: [ "userAdminAnyDatabase" ] } )

然后我停止了mongo,启用了auth并重新启动了mongo。

然后,我尝试与他的用户创建一个数据库。

根据此指南:[http://www.mkyong.com/mongodb/how-to-create-database-or-collection-in-mongodb/]

use fragola 
db.users.save( {username:"fragolino"} )

我得到的是:“未授权在fragola.users上插入”

有人可以帮我吗?

trans by 2020-08-09T07:34:40Z

从node.js连接到mongodb时出现ECONNREFUSED错误

我知道我正在做一些非常愚蠢和愚蠢的事情,但是我希望有人可以帮助我建立从Mac上的node.js到mongodb的基本数据库连接。

我已经使用自制软件安装了mongodb,效果似乎很好。 我已经以本地登录用户身份启动了服务器(mongod),并打开了第二个终端,并确认可以使用mongo连接到该服务器。 当我运行mongo时,出现消息“正在连接:localhost:27017 / test”,然后显示命令提示符。 在mongo shell中运行一些命令,一切似乎都在那儿工作。 左两个端子均打开并运行。

我还确认可以在localhost:28017到达Web界面。

我安装了node.js并添加了猫鼬包。 现在尝试使用超级简单的node.js应用(也以本地登录用户身份运行)进行连接:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

我收到以下错误

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect ECONNREFUSED
    at errnoException (net.js:901:11)
    at Object.afterConnect [as oncomplete] (net.js:892:19)

我的头撞在墙上,试图让事情变得如此简单。 我想念什么?

编辑:这是来自mongod的日志。 如您所见,我尝试了多次,但它们都瞬间失效:

Thu Dec  5 08:19:43.700 [initandlisten] MongoDB starting : pid=14412 port=27017 dbpath=/usr/local/var/mongodb 64-bit host=mobadmins-MacBook-Pro-3.local
           08:19:43.700 [initandlisten] db version v2.4.8
           08:19:43.700 [initandlisten] git version: nogitversion
           08:19:43.700 [initandlisten] build info: Darwin mobadmins-MacBook-Pro-3.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May  1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
           08:19:43.700 [initandlisten] allocator: tcmalloc
           08:19:43.700 [initandlisten] options: { bind_ip: "127.0.0.1", config: "/usr/local/etc/mongod.conf", dbpath: "/usr/local/var/mongodb", logappend: "true", logpath: "/usr/local/var/log/mongodb/mongo.log", rest: true }
           08:19:43.700 [initandlisten] journal dir=/usr/local/var/mongodb/journal
           08:19:43.700 [initandlisten] recover : no journal files present, no recovery needed
           08:19:43.729 [websvr] admin web console waiting for connections on port 28017
           08:19:43.729 [initandlisten] waiting for connections on port 27017
           08:22:34.561 [initandlisten] connection accepted from 127.0.0.1:52160 #3 (1 connection now open)
           08:22:34.563 [conn3] recv(): message len 1124073472 is too large. Max is 48000000
           08:22:34.563 [conn3] end connection 127.0.0.1:52160 (0 connections now open)
           08:24:41.298 [initandlisten] connection accepted from 127.0.0.1:52166 #4 (1 connection now open)
           08:24:41.304 [conn4] end connection 127.0.0.1:52166 (0 connections now open)
           08:25:06.938 [initandlisten] connection accepted from 127.0.0.1:52168 #5 (1 connection now open)
           08:25:06.943 [conn5] end connection 127.0.0.1:52168 (0 connections now open)
           08:25:18.220 [initandlisten] connection accepted from 127.0.0.1:52172 #6 (1 connection now open)
           08:25:18.225 [conn6] end connection 127.0.0.1:52172 (0 connections now open)
           08:25:38.811 [initandlisten] connection accepted from 127.0.0.1:52175 #7 (1 connection now open)
           08:25:38.816 [conn7] end connection 127.0.0.1:52175 (0 connections now open)
trans by 2020-08-08T19:11:25Z

python-在日期时间的月,日,年...上查询Mongodb

我正在使用mongodb并且以这种方式将datetime存储在数据库中

对于日期“ 17-11-2011 18:00”,我存储:

date = datetime.datetime(2011, 11, 17, 18, 0)
db.mydatabase.mycollection.insert({"date" : date})

我想这样的要求

month = 11
db.mydatabase.mycollection.find({"date.month" : month})

要么

day = 17
db.mydatabase.mycollection.find({"date.day" : day})

有人知道如何执行此查询吗?

trans by 2020-08-06T20:27:04Z

node.js-MongoDB + nodejs:如何查询ISODate字段?

我正在使用nodejs与node-mongodb-native驱动程序([http://mongodb.github.io/node-mongodb-native/)。]

我有日期属性存储为ISODate类型的文档。

通过nodejs,我正在使用以下查询:

db.collection("log").find({
    localHitDate: { 
            '$gte': '2013-12-12T16:00:00.000Z',
            '$lt': '2013-12-12T18:00:00.000Z' 
    }
})

它什么也不返回。 为了使其正常工作,我需要执行以下操作:

db.collection("log").find({
    localHitDate: {
            '$gte': ISODate('2013-12-12T16:00:00.000Z'),
            '$lt': ISODate('2013-12-12T18:00:00.000Z')
    }
})

但是ISODate在我的nodejs代码中无法识别。

那么如何通过我的nodejs程序对mongo日期字段进行查询?

谢谢

trans by 2020-08-06T16:30:43Z

JavaScript-猫鼬查找/更新子文档

我的文件夹文件夹有以下架构:

var permissionSchema = new Schema({
    role: { type: String },
    create_folders: { type: Boolean },
    create_contents: { type: Boolean }
});

var folderSchema = new Schema({
    name: { type: string },
    permissions: [ permissionSchema ]
});

因此,对于每个页面,我可以拥有许多权限。 在CMS中,有一个面板,其中列出了所有文件夹及其权限。 管理员可以编辑一个权限并保存。

我可以很容易地用其权限数组保存整个Folder文档,其中只修改了一个权限。 但是我不想保存所有文档(实际架构中包含更多字段),所以我这样做了:

savePermission: function (folderId, permission, callback) {
    Folder.findOne({ _id: folderId }, function (err, data) {
        var perm = _.findWhere(data.permissions, { _id: permission._id });                

        _.extend(perm, permission);

        data.markModified("permissions");
        data.save(callback);
    });
}

但是问题是烫发总是不确定的! 我试图以这种方式“静态地”获取许可:

var perm = data.permissions[0];

而且效果很好,所以问题在于Underscore库无法查询权限数组。 因此,我想有一种更好的方法(和工作方式)来获取所提取文档的子文档。

任何想法?

附注:我解决了使用“ for”循环检查data.permission数组中的每个项目并检查data.permissions [i] ._ id == Permission._id的问题,但是我想要一个更聪明的解决方案,我知道有一个解决方案!

trans by 2020-08-06T04:57:18Z

shell-Ubuntu上安装了什么版本的MongoDB

嗨,我有点外壳n00b。

谁能告诉我如何检查Linux Ubuntu计算机上安装的MongoDB版本?

我看到我的MongoDB Shell版本:1.2.2,所以我很确定MongoDB本身也已经过时了。 有人知道“如何更新MongoDB”文档吗? 我发现mongodb.org有点令人困惑。

谢谢,麻烦您了。


好吧,如果我在mongo shell中使用db.version(),它说1.2.2

如果我$ mongod --version我得到这个:

db version v1.2.2, pdfile version 4.5
Wed Oct 16 10:28:22 git version: nogitversion

我跑了

sudo apt-get update
sudo apt-get install mongodb

并得到

sudo apt-get install mongodb
Reading package lists... Done
Building dependency tree       
Reading state information... Done
mongodb is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 179 not upgraded.

mongod --version
db version v1.2.2, pdfile version 4.5
Wed Oct 16 10:31:07 git version: nogitversion

那么为什么不更新呢? apt-get是否指向错误的回购/来源?

trans by 2020-08-05T07:59:07Z

从mongodb中数组的所有元素中删除字段

这个问题已经在这里有了答案:

  • 如何在mongodb中更新多个数组元素 14个答案
  • 删除在任何mongodb数组中找到的字段 2个答案

我在MongoDB(2.4.5)中有以下文档

{
    "_id" : 235399,
    "casts" : {
        "crew" : [ 
            {
                "_id" : 1186343,
                "withBase" : true,
                "department" : "Directing",
                "job" : "Director",
                "name" : "Connie Rasinski"
            },
            {
                "_id" : 86342,
                "withBase" : true
            }
        ]
    },
    "likes" : 0,
    "rating" : 0,
    "rating_count" : 0,
    "release_date" : "1955-11-11"
}

我想从casts.crew内的数组元素中删除withBase字段。

我试过了

db.coll.update({_id:235399},{$unset: {  "casts.crew.withBase" : 1 } },false,true)

没有改变。

并尝试了这个。

db.coll.update({_id:235399},{$unset: {  "casts.crew" : { $elemMatch: { "withBase": 1 } } } },false,true)

它从文档中删除了整个乘员组。

有人可以给我正确的查询吗?

trans by 2020-08-05T02:49:25Z

使用聚合框架在MongoDB中进行组计数

假设我的MongoDB模式如下:

{car_id: "...", owner_id: "..."}

这是多对多的关系。 例如,数据可能如下所示:

+-----+----------+--------+
| _id | owner_id | car_id |
+-----+----------+--------+
|   1 |        1 |      1 |
|   2 |        1 |      2 |
|   3 |        1 |      3 |
|   4 |        2 |      1 |
|   5 |        2 |      2 |
|   6 |        3 |      4 |
|   7 |        3 |      5 |
|   8 |        3 |      6 |
|   9 |        3 |      7 |
|  10 |        1 |      1 | <-- not unique
+-----+----------+--------+

我想获取每个所有者拥有的汽车数量。 在SQL中,这可能类似于:

SELECT owner_id, COUNT(*) AS cars_owned
FROM (SELECT owner_id FROM car_owners GROUP BY owner_id, car_id) AS t
GROUP BY owner_id;

在这种情况下,结果将如下所示:

+----------+------------+
| owner_id | cars_owned |
+----------+------------+
|        1 |          3 |
|        2 |          2 |
|        3 |          4 |
+----------+------------+

我如何通过聚合框架使用MongoDB完成同一件事?

trans by 2020-08-04T18:14:42Z

事件源-EventStore与MongoDb

我想知道使用EventStore([http://geteventstore.com)]相对于在MongoDb中实现事件源实现有什么优势。

我问的原因是,我们公司每天都有许多人与MongoDb合作。 但是,它们不能与事件源一起使用。 尽管他们对这个主题还不完全了解,但是他们也不会在任何地方开始实现它。

我将要开始一个非常适合事件采购的项目。 大约有16个定义明确的事件,以及大约7个定义明确的投影。 我之所以说“大约”,是因为我知道一旦看到使用中的产品,就会有更多的预测和事件发生。

该方法将首先使用API,并使用我们组织其他部分将要使用的REST Api。

虽然我已经按照Greg Young的定义阅读了很多有关事件源的内容,但是我从未真正实现过事件源解决方案。

这是一个绿色领域的项目。 由于我们将所有内容公开为REST接口,因此没有技术限制。 因此,如果有人在EvenStore或MongoDb的事件采购方面有工作经验,请赐教。

也是关于事件源的几乎完全不相关的问题:您是否曾经直接查询事件存储? 还是总是创建新的投影并重放事件以填充这些投影?

trans by 2020-08-03T21:29:15Z

ruby-如何在控制台中禁用MongoDB日志消息?

我有这个小测试脚本:

require 'mongo'

mongo_client = Mongo::Client.new(['127.0.0.1:27017'], :database => 'test')
mongo_client[:collection].insert_one({a: 1})

这是控制台输出:

$ ruby test.rb
D, [2015-05-17T21:12:05.504986 #25257] DEBUG -- : MONGODB | Adding 127.0.0.1:27017 to the cluster. | runtime: 0.0212ms
D, [2015-05-17T21:12:05.531238 #25257] DEBUG -- : MONGODB | COMMAND | namespace=admin.$cmd selector={:ismaster=>1} flags=[] limit=-1 skip=0 project=nil | runtime: 24.5481ms
D, [2015-05-17T21:12:05.554532 #25257] DEBUG -- : MONGODB | COMMAND | namespace=test.$cmd selector={:insert=>"collection", :documents=>[{:a=>1, :_id=><BSON::ObjectId:0x21935660 data=5558e80553657262a9000000>}], :writeConcern=>{:w=>1}, :ordered=>true} flags=[] limit=-1 skip=0 project=nil | runtime: 21.1718ms

我想禁用这些日志消息,我不想使用肮脏的STDOUT。 我没有在ruby驱动程序中找到任何针对此的选项,并且我尝试使用这些指令来编辑/etc/mongod.conf(但它没有解决问题):

verbose = false
diaglog = 0

任何想法? 我不知道还能尝试什么!

trans by 2020-08-01T15:40:04Z

node.js-猫鼬模式创建

我刚开始是猫鼬。 我有一个带有猫鼬的创建脚本,该脚本使用示例数据创建模式和数据库。

现在,我编写实际的应用程序。 每次我的应用程序运行时,我是否需要创建模式对象,或者它已经以某种方式可用?

换句话说,我是否需要在每个使用猫鼬访问数据库的应用程序中运行此代码,还是仅在第一次运行此代码:

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});

如果我有setters / validations / etc,答案将如何变化?

trans by 2020-07-30T21:17:36Z

在MongoDB中使用UUID代替ObjectID

出于性能原因,我们正在将数据库从MySQL迁移到MongoDB,并考虑将哪些内容用于MongoDB文档的ID。 我们在使用ObjectID(这是MongoDB的默认值)还是使用UUID(这是迄今为止在MySQL中一直使用的东西)之间进行辩论。 到目前为止,我们必须支持所有这些选项的参数如下:

对象ID:ObjectID是MongoDB的默认值,我假设(尽管不确定)这是有原因的,这意味着我希望MongoDB可以比UUID更有效地处理它们,或者有其他理由更喜欢它们。 我还发现了这个stackoverflow答案,其中提到了使用ObjectID可以使索引更有效,但是对一些“更有效”的大小有一些度量标准将是很好的。

UUID:我们支持使用UUID(这是非常重要的)的基本论点是,几乎任何数据库都以一种或另一种方式支持UUID。 这意味着,如果以后由于某种原因我们决定从MongoDB切换到其他方式,并且我们已经有了一个API,该API可以根据数据库的ID从数据库中检索文档,因为该ID可以继续,因此该API的客户端没有任何变化 完全一样。 如果我们要使用ObjectID,我不太确定如何将它们迁移到另一个数据库。

是否有人对这些选择中的一种可能比另一种更好?为什么有任何见解? 您是否曾经在MongoDB中使用UUID代替ObjectID,如果是,您遇到的优点/问题是什么?

trans by 2020-07-30T20:25:47Z

java-Mongo-忽略持久化属性

我有一个标准POJO,其中包含一组属性。 POJO已被注释为@Document,以便作为文档保留在MongoDB中。

我如何(注释?)可以忽略/避免POJO中的属性之一被持久化?

trans by 2020-07-30T18:53:35Z

mongodb-如何有效地执行多个键的“区别”?

例如,有一个这样的集合:

{market:'SH',代码:'000001',日期:'2012-01-01',价格:1000}
{市场:“ SZ”,代码:“ 000001”,日期:“ 2012-01-01”,价格:1000}
{market:'SH',代码:'000001',日期:'2012-01-02',价格:1000}
{市场:'SZ',代码:'000001',日期:'2012-01-02',价格:1000}
{market:'SH',代码:'000002',日期:'2012-01-03',价格:1000}
...

该集合包含数千万个文档。

我想用两个键来调用distinct:

collection.distinct('market', 'code');

并得到结果:

[{market:'SH',代码:'000001'}, {market:“ SZ”,代码:“ 000001”}, {market:'SH',代码:'000002'}]

由于本机唯一命令仅接受一个键,因此我尝试使用map-reduce来实现它。 但是map-reduce太慢了,以至于无法原生识别。 在我的一键式独特测试中,map-reduce的花费比本地独特花费大约十倍。
有没有一种有效的方法来实现多键区别?

trans by 2020-07-30T01:20:03Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共30页