我有一组定义了多键索引的文档.但是,对于43K文档,查询的性能相当差.这个查询的〜215ms被认为是差的吗?如果nscanned是43902(等于集合中的文档总数),我是否正确定义了索引?
文献:
{
"_id": {
"$oid": "50f7c95b31e4920008dc75dc"
},
"bank_accounts": [
{
"bank_id": {
"$oid": "50f7c95a31e4920009b5fc5d"
},
"account_id": [
"ff39089358c1e7bcb880d093e70eafdd",
"adaec507c755d6e6cf2984a5a897f1e2"
]
}
],
"created_date": "2013,01,17,09,50,19,274089",
}
Run Code Online (Sandbox Code Playgroud)
指数:
{ "bank_accounts.bank_id" : 1 , "bank_accounts.account_id" : 1}
Run Code Online (Sandbox Code Playgroud)
查询:
db.visitor.find({ "bank_accounts.account_id" : "ff39089358c1e7bcb880d093e70eafdd" , "bank_accounts.bank_id" : ObjectId("50f7c95a31e4920009b5fc5d")}).explain()
Run Code Online (Sandbox Code Playgroud)
说明:
{
"cursor" : "BtreeCursor bank_accounts.bank_id_1_bank_accounts.account_id_1",
"isMultiKey" : true,
"n" : 1,
"nscannedObjects" : 43902,
"nscanned" : 43902,
"nscannedObjectsAllPlans" : 43902,
"nscannedAllPlans" : 43902,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0, …Run Code Online (Sandbox Code Playgroud) 因此,由于一些奇怪的原因,我的用户没有被授权在krimson数据库中写任何东西.数据库连接成功,但授予用户写入数据库的访问权限未按预期工作.
完全错误
Caused by: com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on krimson to execute command { findandmodify: "users", query: { _id: "_id" }, fields: {}, sort: {}, new: true, upsert: true, update: { $i
nc: { _id: 1 } } }' on server ds037395.mongolab.com:37395. The full response is { "ok" : 0.0, "errmsg" : "not authorized on krimson to execute command { findandmodify: \"users\", query: { _id: \"_id\" }, fields: {}, sort: {}, new:
true, upsert: true, update: …Run Code Online (Sandbox Code Playgroud) 所以我正在努力通过Manning的Getting Mean书并遵循第5章中的步骤我试图在Mongolab上使用db作为Heroku的附加组件.当我运行此代码(本地和Heroku)时,它返回此错误:
MongoError:getaddrinfo ENOTFOUND undefined undefined:27017
这是我目前的代码:
var mongoose = require('mongoose');
var dbURI = "mongodb://localhost/loc8r";
if (process.env.NODE_ENV === 'production') {
dbURI = process.env.MONGOLAB_URI;
}
mongoose.connect(dbURI);
Run Code Online (Sandbox Code Playgroud)
疑难解答我从终端启动了应用程序:
NODE_ENV=production MONGOLAB_URI=/*my mongo uri here*/
Run Code Online (Sandbox Code Playgroud)
它本地运行良好.所以我不确定问题的来源.有关排除错误的任何建议吗?
好吧,所以我已经解决了这个问题几个小时了,不知道如何解决这个问题,因为我只是一个新手.我正在跟随Colt Steele的一个名为WEBDEVBOOTCAMP的UDEMY课程.在部署部分,每次使用Heroku部署时,这都会给我一个"不允许的方法".我一直在从头开始关注柯尔特的方式,这就是为什么我想知道它是怎么回事.
请帮忙.
顺便说一句,这些是我收到的heroku日志:
2017-08-07T21:45:10.990742+00:00 heroku[web.1]: Starting process with command `npm start`
2017-08-07T21:45:14.881336+00:00 app[web.1]:
2017-08-07T21:45:14.881350+00:00 app[web.1]: > v1@1.0.0 start /app
2017-08-07T21:45:14.881352+00:00 app[web.1]:
2017-08-07T21:45:14.881351+00:00 app[web.1]: > node app.js
2017-08-07T21:45:16.594550+00:00 app[web.1]: Warning: connect.session() MemoryStore is not
2017-08-07T21:45:16.594555+00:00 app[web.1]: designed for a production
environment, as it will leak
2017-08-07T21:45:16.594556+00:00 app[web.1]: memory, and will not scale past a single process.
2017-08-07T21:45:16.610398+00:00 app[web.1]: (node:17) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` …Run Code Online (Sandbox Code Playgroud) 我尝试过使用:
db:
uri: process.env.MONGOLAB_URI
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。(编辑:事实上,这只返回“process.env.MONGOLAB_URI”的字符串)我也尝试过:
<%= ENV['MONGOLAB_URI'] %>
Run Code Online (Sandbox Code Playgroud)
但我在一篇关于 ruby 应用程序中的 yaml 的文章中看到了这一点(现在找不到链接)。
正确的语法是什么?
为此示例获取100gb数据库:
Azure存储成本:6.05英镑/米AWS上的MongoLab,1节点成本:153.18英镑/米
我错过了什么吗?计算错误了吗?有人可以在这里为我解决问题吗?我更喜欢使用MongoLab,因为我非常喜欢node/mongoDB.但是,与表存储一起使用它似乎是一种更具成本效益的解决方案.
我知道Key/Value和Document store之间的区别,我更喜欢后者.
我在MongoDB中的一个模式上创建多个复合索引时遇到了一些问题.使用MongoLab时,我知道由于命名问题,一些索引在它们太长时就不会创建.所以我怀疑这可能是为什么有些人没有创建的原因
var Schema = new mongoose.Schema({ ... });
// Created
Schema.index({
one: 1,
three: 1
});
// Not Created
Schema.index({
one: 1,
two: 1,
three: 1,
four: 1,
five: 1,
six: 1,
seven: 1,
eight: 1,
nine: 1,
ten: 1
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用聚合与项目,匹配和排序,但我得到一个例外(MongoResultException确切地说)说
exception: A pipeline stage specification object must contain exactly one field.
当我没有使用排序和限制时它工作正常,但我需要它们.我不使用的原因是find()因为我在某处读到它可以提高性能.请帮忙
$query = array(.... //An actual query that works with find()
$collection = $this->db->CollectionName;
$project = array(
'$project' => array(
'Field1' => 1,
'Field2'=> 1,
'Field3'=> 1,
'Field4' => 1
)
);
$match = array( '$match'=>$query);
$sort = array('Field3' => -1, 'Field4'=>-1);
$limit = array('$limit' => 100);
$result = $collection->aggregate(array($match,$project,$sort,$limit));
return $result;
Run Code Online (Sandbox Code Playgroud) 嗨,我正在尝试建立一个简单的联系
mongoose.connect('mongodb://JFalcon:john2522@ds119476.mlab.com:19476/hidonshabat', {useMongoClient: true}, function(err){
if(err) {
console.log('Some problem with the connection ' +err);
} else {
console.log('The Mongoose connection is ready');
}
})
Run Code Online (Sandbox Code Playgroud)
如您所见,这是网址!请帮我
我正在将数据库从 Mlab 迁移到 MongoDB Atlas。我们必须将 mongodb 的 npm 版本升级到3.4.1MongoDB atlas 数据库版本4.2.5。
连接功能已按照此答案中所述进行了更新。但是在将 npm 版本升级到3.4.1findOne 后,即使文档在集合中可用,findOne 查询也会返回空值。这是与 findOne 查询相关的代码部分,
db.collection('organisations').findOne({ _id: database.ObjectID(orgState) })
.then((activeOrganisation) => {
console.log(activeOrganisation);
data.activeOrganisation = activeOrganisation;
callback(null, activeOrganisation);
}, (error) => {
callback(error, null);
});
Run Code Online (Sandbox Code Playgroud)
因此我想知道数据库连接是否有问题,因此我使用运行db.serverConfig.isConnected(),db.databaseName和进行了测试db.listCollections().toArray()。返回isconnected的true和返回的数据库名也是正确的。但db.listCollections().toArray()返回一个空数组,这意味着我的数据库中没有不能的集合。
然后我尝试findOneAndUpdate查询只是为了检查会发生什么。这是它的相关代码,
db.collection('users').findOneAndUpdate(
{ emails: { $elemMatch: { email: "rajitha1591@outlook.com" } } },
{ $addToSet: { unsubscribedEmails: "models" } }) …Run Code Online (Sandbox Code Playgroud)