小编Asy*_*sky的帖子

将MongoDB中的_id类型更改为整数是不是很糟糕?

MongoDB对_id使用ObjectId类型.

如果我使_id为递增整数会不会很糟糕?

(有了这个宝石,如果你有兴趣)

ruby-on-rails mongodb mongoid

24
推荐指数
2
解决办法
2万
查看次数

在MongoDB中查找文档,其中数组字段是查询数组的子集

假设我插入了一组文档,每个文档都有一个array字段.我想找到所有文档,使其array字段是查询数组的子集.例如,如果我有以下文件,

collection.insert([
  {
     'name': 'one',
     'array': ['a', 'b', 'c']
  },
  {
     'name': 'two',
     'array': ['b', 'c', 'd']
  },
  {
     'name': 'three',
     'array': ['b', 'c']
  }
])
Run Code Online (Sandbox Code Playgroud)

我询问collection.find({'array': {'$superset': ['a', 'b', 'c']}),我希望看到的文件one,并three['a', 'b', 'c']['b', 'c']的两个子集['a', 'b', 'c'].换句话说,我想要做的蒙戈的逆$all查询,它选择所有文件使得查询阵列是文档的子集array场.这可能吗?如果是的话,怎么样?

mongodb

8
推荐指数
2
解决办法
1907
查看次数

MongoDB文本索引错误:不支持语言覆盖

我使用的是2.6.1版.我正在尝试创建一个文本索引,我收到错误:

{
    "connectionId" : 4932,
    "err" : "language override unsupported: en-US",
    "code" : 17262,
    "n" : 0,
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

被搜索的文档具有"语言"字段,其值为"en-US",但不用于在文本搜索中覆盖该语言.我试图创建文本索引来指定一个不存在的字段("lang"); 但是,我得到了同样的错误.我能够在2.6.0版本上创建索引.有没有办法创建文本索引并忽略language_override字段?

这是我在2.6.0上使用的工作命令(在2.6.1上不起作用):

db.collection.ensureIndex({ title: "text" }, { name: "TextIndex" })
Run Code Online (Sandbox Code Playgroud)

这是我在2.6.1上尝试指定另一个不存在的language_override字段的命令:

db.collection.ensureIndex({ title: "text" }, { name: "TextIndex" }, { language_override: "lang" })
Run Code Online (Sandbox Code Playgroud)

提前致谢!

mongodb

6
推荐指数
2
解决办法
5120
查看次数

什么是mongodb日志中的"锁(微)w:16035"和"锁(微)r:10051"

我在MongoDb配置文件中启用了分析.

profile=2
slowms=5
Run Code Online (Sandbox Code Playgroud)

mongodb日志包含花费超过5毫秒的所有查询(很奇怪,我认为profile = 2意味着记录所有查询).

对于所有update条目,行结束locks(micros) w:17738 17ms(实际数字变化).对于所有query条目,该行包含locks(micros) r:15208

样品线

Tue Dec 03 02:29:43.084 [conn11] update DbName.CollectionName query: { _id: ObjectId('51dfd2791bbdbe0b44395553')} update: { json for new document } nscanned:1 nmoved:1 nupdated:1 keyUpdates:0 locks(micros) w:17738 17ms
Run Code Online (Sandbox Code Playgroud)

阅读文档,我发现以下部分,

system.profile.lockStats

New in version 2.2.

The time in microseconds the operation spent acquiring and holding locks. This field reports data for the following lock types:

    R - global read lock
    W - global write …
Run Code Online (Sandbox Code Playgroud)

mongodb

5
推荐指数
1
解决办法
3319
查看次数

Mongoose不能通过文档阵列编辑和版本控制进行扩展吗?

我正在使用Node.js和MongoDB/Mongoose开发Web应用程序.我们最常用的Model,Record,有许多子文档数组.例如,其中一些包括"评论","预订"和"订阅者".

在客户端应用程序中,每当用户点击"删除"按钮时,它就会触发针对该特定注释的删除路由的AJAX请求.我遇到的问题是,当许多AJAX调用同时进入时,Mongoose在某些(但不是全部)调用中失败并显示"Document not found"错误.

这种情况发生在一次快速拨号和多次拨号时.我认为这是由于Mongoose中的版本导致文档冲突.我们目前的删除流程是:

  1. 使用获取文档 Record.findById()
  2. 从相应的数组中删除子文档(例如,使用comment.remove())
  3. 呼叫 record.save()

我找到了一个解决方案,我可以手动更新集合Record.findByIdAndUpdate,然后使用$pull运算符.但是,这意味着我们不能使用任何mongoose的中间件并完全松开版本控制.我越是想到它,我越发明这种情况会发生,我将不得不使用Mongoose的包装函数,如findByIdAndUpdatefindAndRemove.我能想到的唯一其他解决方案是将删除尝试放入while循环并希望它能够正常工作,这似乎是一个非常糟糕的修复.

使用Mongoose包装器并没有真正解决我的问题,因为它根本不允许我使用任何类型的中间件或钩子,这基本上是使用Mongoose的巨大好处之一.

这是否意味着Mongoose对于快速编辑的任何东西都是无用的,我可能只使用本机MongoDB驱动程序?我误解了猫鼬的局限吗?我怎么能解决这个问题?

javascript mongoose mongodb node.js express

4
推荐指数
1
解决办法
807
查看次数

如何在 MongoDB 中手动添加引用?

我在开发过程中使用 Node.js Web 前端访问 MongoDB 文档。

我现在得到以下文件:

{
   "_id": ObjectID("500abe6a25dff13c7c000001")
    , "username": "kyogron"
    , "email": "kyogron@example.de"
    , "contacts": [ObjectID("500abe6a2543213c7c000002")] // this should contain other user's id
}
Run Code Online (Sandbox Code Playgroud)

我现在想在前端实现该功能之前手动将另一个 user_id 添加到联系人数组中。

正如您在上面看到的,我已经尝试使用 ObjectID 关键字,但这不起作用......

javascript reference mongodb

3
推荐指数
1
解决办法
7145
查看次数

MongoDB/Mongoid:搜索与数组中第一项匹配的文档

我有一个包含数组的文档:

{
    _id: ObjectId("515e10784903724d72000003"),
    association_chain: [
        {
            name: "Product",
            id: ObjectId("4e1e2cdd9a86652647000003")
        }
    ],
    //...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试在集合中搜索数组中name第一项association_chain与给定值匹配的文档.

我怎么能用Mongoid做到这一点?或者,如果您只知道如何使用MongoDB完成此操作,如果您发布一个示例,那么我可能想知道如何使用Mongoid.

ruby-on-rails mongodb mongoid mongoid3

2
推荐指数
1
解决办法
1510
查看次数

一起使用MongoDB Limit()和Skip()

这是查询:

$collection->find(array("x"=>new MongoId("..."))->skip(5)->limit(10);
Run Code Online (Sandbox Code Playgroud)

使用说明给出以下结果:

[n]=>10
[nscanned]=>15
[nscannedObjects]=>15
Run Code Online (Sandbox Code Playgroud)

有索引"x".那么,如果我跳过前5个文件,为什么扫描对象的数量是15而不是10?

php indexing mongodb

1
推荐指数
1
解决办法
9987
查看次数

日期聚合框架

我正试图在Mongo中按日期聚合数据,但我无法达到我想要的效果.现在,我正在使用这个:

db.aggregData.aggregate( { $group: {_id: "$Date".toString(),  
                                   tweets: { $sum: "$CrawledTweets"} } }, 
                         { $match:{ _id: {$gte: ISODate("2013-03-19T12:31:00.247Z") }}}, 
                         { $sort: {Date:-1} } 
                       )
Run Code Online (Sandbox Code Playgroud)

结果如下:

"result" : [
                {
                        "_id" : ISODate("2013-03-19T12:50:00.641Z"),
                        "tweets" : 114
                },
                {
                        "_id" : ISODate("2013-03-19T12:45:00.631Z"),
                        "tweets" : 114
                },
                {
                        "_id" : ISODate("2013-03-19T12:55:00.640Z"),
                        "tweets" : 123
                },
                {
                        "_id" : ISODate("2013-03-19T12:40:00.628Z"),
                        "tweets" : 91
                    },
                {
                        "_id" : ISODate("2013-03-19T12:31:00.253Z"),
                        "tweets" : 43
                },
                {
                        "_id" : ISODate("2013-03-19T13:20:00.652Z"),
                        "tweets" : 125
                },
                {
                        "_id" : ISODate("2013-03-19T12:31:00.252Z"),
                        "tweets" …
Run Code Online (Sandbox Code Playgroud)

date mongodb node.js aggregation-framework

0
推荐指数
1
解决办法
996
查看次数

Mongodb副本集最初以SECONDARY模式开始

我制作了一个mongodb replicaSet,其中包含一个主要,次要和仲裁器.

我面临的问题是,当我最初启动mongodb服务器时,它正在以辅助模式启动

当我在终端上键入mongo时显示为

ubsc:SECONDARY>
Run Code Online (Sandbox Code Playgroud)

我用了创建了一个副本集

config = {with all my server details }
rs.reconfig(config)
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用rs.add(serverhoststr)选项.

这低于我的mongo shell输出和日志文件

ubsc:PRIMARY> rs.status()
{
    "set" : "ubsc",
    "date" : ISODate("2013-10-31T19:09:26Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "mongoA:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 2210,
            "optime" : Timestamp(1383246016, 1),
            "optimeDate" : ISODate("2013-10-31T19:00:16Z"),
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "mongoB:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" …
Run Code Online (Sandbox Code Playgroud)

mongodb

0
推荐指数
1
解决办法
2438
查看次数