Questions tagged «mongodb»

MongoDB是一个可扩展的,高性能,开源,面向文档的NoSQL数据库。它支持多种语言和应用程序开发平台。可以在https://dba.stackexchange.com上询问有关服务器管理的问题。

12
MongoDB:如何用一个命令更新多个文档?
我很惊讶地发现以下示例代码仅更新一个文档: > db.test.save({"_id":1, "foo":"bar"}); > db.test.save({"_id":2, "foo":"bar"}); > db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}}); > db.test.find({"test":"success!"}).count(); 1 我知道我可以循环浏览并不断更新,直到它们都被更改为止,但这似乎效率很低。有没有更好的办法?
144 mongodb  document  nosql 

2
如何检查数组字段在MongoDB中是否包含唯一值或另一个数组?
我现在正在使用mongodb。 我有博客文章集,博客文章中有一个标记数组,例如数组 blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5'] blogpost2.tags = ['tag2', 'tag3'] blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5'] blogpost4.tags = ['tag1', 'tag4', 'tag5'] 我如何进行这些搜索 包含“ tag1” 包含['tag1','tag2'], 包含['tag3','tag4']中的任何一个
143 mongodb 

4
MongoDB多对多协会
您将如何与MongoDB建立多对多关联? 例如; 假设您有一个Users表和Roles表。用户有许多角色,而角色有许多用户。在SQL领域中,您将创建一个UserRoles表。 Users: Id Name Roles: Id Name UserRoles: UserId RoleId MongoDB中如何处理相同类型的关系?


6
MongoDB /猫鼬在特定日期查询?
是否可以查询特定日期? 我在mongo Cookbook中发现我们可以针对某个范围进行查询 ,例如: db.posts.find({"created_on": {"$gte": start, "$lt": end}}) 但是可能有特定的日期吗?这不起作用: db.posts.find({"created_on": new Date(2012, 7, 14) })

5
如何找到已安装的MongoDB的确切版本
我在Windows 7本地安装了mongoDB 3.2。我想了解它的特定版本(例如3.2.1或3.2.3或...)。我怎么找到它?如果打开数据库外壳程序(mongo.exe),则可以看到输出: MongoDB Shell版本:3.2.0 但这只是shell版本,我不确定它是否与我的真实数据库版本相同。
141 mongodb 

10
如何解决MongoDB中缺少事务的问题?
我知道这里也有类似的问题,但是如果我需要事务或使用原子操作或两阶段提交,它们要么告诉我切换回常规RDBMS系统。第二种解决方案似乎是最佳选择。第三,我不想跟进,因为看来很多事情可能出错,而且我无法在各个方面进行测试。我很难重构项目以执行原子操作。我不知道这是否来自我有限的观点(到目前为止,我仅使用SQL数据库),还是实际上无法完成。 我们想在我们公司试行MongoDB。我们选择了一个相对简单的项目-SMS网关。它使我们的软件可以将SMS消息发送到蜂窝网络,而网关则可以完成肮脏的工作:实际上是通过不同的通信协议与提供商进行通信。网关还管理消息的计费。每个申请该服务的客户都必须购买一些积分。发送消息时,系统自动减少用户的余额,如果余额不足,则拒绝访问。另外,由于我们是第三方SMS提供商的客户,因此我们也可能拥有自己的余额。我们也必须跟踪这些。 我开始考虑如果我降低了一些复杂性(外部账单,排队的SMS发送),如何使用MongoDB存储所需的数据。来自SQL世界,我将为用户创建一个单独的表,为用户创建另一个表,用于存储SMS消息,以及一个用于存储有关用户余额的事务的表。假设我为MongoDB中的所有数据库创建了单独的集合。 设想一下此简化系统中的SMS发送任务,其步骤如下: 检查用户是否有足够的余额;如果信用额不足,请拒绝访问 将消息以及详细信息和成本发送并存储在SMS集合中(在实时系统中,消息将具有status属性,任务将提取该消息进行传递,并根据其当前状态设置SMS的价格) 通过发送邮件的费用减少用户的余额 将交易记录在交易集合中 现在有什么问题吗?MongoDB只能对一个文档进行原子更新。在上一个流程中,可能会发生某种错误,消息已存储在数据库中,但用户的余额未更新和/或未记录交易。 我提出了两个想法: 为用户创建一个集合,并将余额存储为字段,将与用户相关的交易和消息存储为用户文档中的子文档。因为我们可以原子地更新文档,所以实际上解决了交易问题。缺点:如果用户发送许多SMS消息,则文档的大小可能会变大,并且可能会达到4MB的文档限制。也许我可以在这种情况下创建历史记录文档,但是我认为这不是一个好主意。另外,我不知道如果将越来越多的数据推送到同一个大文档中,系统将有多快。 为用户创建一个集合,为事务创建一个。可以有两种交易:余额更改为正的信用购买和余额更改为负的发送的消息。交易中可能有一个子文档;例如,在发送的消息中,可以将SMS的详细信息嵌入交易中。缺点:我不存储当前用户余额,因此每次用户尝试发送消息时都必须进行计算,以判断消息是否可以通过。恐怕随着存储的事务数量的增加,此计算可能会变慢。 我对选择哪种方法有些困惑。还有其他解决方案吗?在网上找不到关于如何解决此类问题的最佳实践。我猜想许多试图熟悉NoSQL世界的程序员在一开始就面临类似的问题。

6
如何使用Mongoose访问现有集合?
我question在数据库中收集了300个对象test。我可以通过MongoDB的交互式外壳轻松地与该集合进行交互;但是,当我尝试在express.js应用程序中通过Mongoose获取集合时,我得到了一个空数组。 我的问题是,如何才能访问此现有数据集而不是快速创建它?这是一些代码: var mongoose = require('mongoose'); var Schema = mongoose.Schema; mongoose.connect('mongodb://localhost/test'); mongoose.model('question', new Schema({ url: String, text: String, id: Number })); var questions = mongoose.model('question'); questions.find({}, function(err, data) { console.log(err, data, data.length); }); 输出: null [] 0

10
在MongoDB控制台中按_id删除
在MongoDB控制台中,如何按ID删除记录?这是我的收藏: [ { "_id" : { "$oid" : "4d512b45cc9374271b02ec4f" }, "name" : "Gazza" }, { "_id" : { "$oid" : "4d513345cc9374271b02ec6c" }, "name" : "Dave", "adminOf" : { }, "email" : "email@email.com" } ] 这是我尝试过的不起作用的命令: db.test_users.remove( {"_id":{"$oid":new ObjectId("4d512b45cc9374271b02ec4f")}}); db.test_users.remove( {"_id":{"$oid":"4d513345cc9374271b02ec6c"}}); db.test_users.remove( {"_id":"4d512b45cc9374271b02ec4f"}); db.test_users.remove( {"_id":new ObjectId("4d512b45cc9374271b02ec4f")}); 按名称删除有效: db.test_users.remove( {"name":"Gazza"}); 如果有任何区别,它位于mongodb.org的浏览器外壳中 谢谢
137 mongodb 


11
在Linux / OS X上启动mongod服务的正确方法是什么?
我已经安装了mongodb并能够运行它,使用它,做简单的数据库读/写类型的东西。现在,我正在尝试设置Mac以将mongod作为服务运行。 我收到“找不到命令”的响应: init mongod start 回应: ~: service mongod start service: This command still works, but it is deprecated. Please use launchctl(8) instead. service: failed to start the 'mongod' service 如果我尝试: ~: launchctl start mongod launchctl start error: No such process 因此,显然我在四处徘徊。下一步似乎是输入随机字符,直到某些方法起作用为止。该命令做的工作是:mongod --quiet &我不知道,也许是你的方式该怎么办呢?也许我应该只是退出“安静模式”并添加> /logs/mongo.log到命令行末尾? 我正在Mac上构建开发环境,目的是在linux服务器上做同样的事情。我只是不确定Bash命令。我尝试获取答案的所有其他搜索都为Windows计算机提供了建议。 也许有人知道命令的Linux版本? 非常感谢

5
MongoDB / NoSQL:保留文档更改历史记录
数据库应用程序中一个相当普遍的要求是跟踪对数据库中一个或多个特定实体的更改。我听说过这称为行版本控制,日志表或历史记录表(我敢肯定还有其他名称)。在RDBMS中有多种方法可以实现它-您可以将所有源表中的所有更改都写入单个表(更多日志),或者为每个源表都有单独的历史表。您还可以选择管理应用程序代码的登录或通过数据库触发器进行管理。 我正在尝试思考在NoSQL /文档数据库(特别是MongoDB)中针对同一问题的解决方案是什么样的,以及如何以统一的方式解决它。它会像创建文档的版本号一样简单,并且永远不会覆盖它们吗?为“真实”文档还是“已记录”文档创建单独的集合?这将如何影响查询和性能? 无论如何,这是NoSQL数据库的常见情况,如果是,是否有常见的解决方案?
134 mongodb  nosql 

10
使用MongoClient v3.0时db.collection不是函数
我一直在尝试使用MongoDB在nodeJS上进行W3schools教程。 当我尝试在nodeJS环境中实现此示例并通过AJAX调用调用该函数时,出现以下错误: TypeError: db.collection is not a function at c:\Users\user\Desktop\Web Project\WebService.JS:79:14 at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5 at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:794:11 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9) 请在下面找到我的实现代码: var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/mytestingdb"; MongoClient.connect(url, function(err, db) { if (err) throw err; db.collection("customers").findOne({}, function(err, result) { if (err) …
132 node.js  mongodb 

4
如何用猫鼬生成ObjectId?
我想ObjectId用Mongoose 生成一个MongoDB 。有没有办法ObjectId从Mongoose 访问构造函数? 这个问题是关于从头开始产生新的 ObjectId。生成的ID是全新的通用唯一ID。 另一个问题是关于ObjectId从现有的字符串表示形式创建一个。在这种情况下,您已经具有ID的字符串表示形式(它可能是通用的也可能不是唯一的),并且正在将其解析为ObjectId。

3
使用MongoDB检查字段是否存在
因此,我试图查找所有具有字段集并且不为空的记录。 我尝试使用$exists,但是根据MongoDB文档,此查询将返回等于null的字段。 $exists 与包含存储空值的字段的文档匹配。 所以我现在假设我必须做这样的事情: db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } }) 但是,无论何时尝试,我都会收到错误消息[invalid use of $not] 有人知道如何查询此消息吗?
131 mongodb 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.