假设我插入了一组文档,每个文档都有一个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场.这可能吗?如果是的话,怎么样?
我使用的是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配置文件中启用了分析.
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
Run Code Online (Sandbox Code Playgroud)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 …
我正在使用Node.js和MongoDB/Mongoose开发Web应用程序.我们最常用的Model,Record,有许多子文档数组.例如,其中一些包括"评论","预订"和"订阅者".
在客户端应用程序中,每当用户点击"删除"按钮时,它就会触发针对该特定注释的删除路由的AJAX请求.我遇到的问题是,当许多AJAX调用同时进入时,Mongoose在某些(但不是全部)调用中失败并显示"Document not found"错误.
这种情况只发生在一次快速拨号和多次拨号时.我认为这是由于Mongoose中的版本导致文档冲突.我们目前的删除流程是:
Record.findById()comment.remove())record.save()我找到了一个解决方案,我可以手动更新集合Record.findByIdAndUpdate,然后使用$pull运算符.但是,这意味着我们不能使用任何mongoose的中间件并完全松开版本控制.我越是想到它,我越发明这种情况会发生,我将不得不使用Mongoose的包装函数,如findByIdAndUpdate或findAndRemove.我能想到的唯一其他解决方案是将删除尝试放入while循环并希望它能够正常工作,这似乎是一个非常糟糕的修复.
使用Mongoose包装器并没有真正解决我的问题,因为它根本不允许我使用任何类型的中间件或钩子,这基本上是使用Mongoose的巨大好处之一.
这是否意味着Mongoose对于快速编辑的任何东西都是无用的,我可能只使用本机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 关键字,但这不起作用......
我有一个包含数组的文档:
{
_id: ObjectId("515e10784903724d72000003"),
association_chain: [
{
name: "Product",
id: ObjectId("4e1e2cdd9a86652647000003")
}
],
//...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在集合中搜索数组中name第一项association_chain与给定值匹配的文档.
我怎么能用Mongoid做到这一点?或者,如果您只知道如何使用MongoDB完成此操作,如果您发布一个示例,那么我可能想知道如何使用Mongoid.
这是查询:
$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?
我正试图在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) 我制作了一个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)