当一个索引是另一个索引的子集时,MongoDB似乎使用了低效的查询模式.
class Model
field :status, :type => Integer
field :title, :type => String
field :subtitle, :type => String
field :rating, :type => Float
index([
[:status, Mongo::ASCENDING],
[:title, Mongo::ASCENDING],
[:subtitle, Mongo::ASCENDING],
[:rating, Mongo::DESCENDING]
])
index([
[:status, Mongo::ASCENDING],
[:title, Mongo::ASCENDING],
[:rating, Mongo::DESCENDING]
])
end
Run Code Online (Sandbox Code Playgroud)
查询时在第一索引正在使用两者status,title以及subtitle和排序上rating,只是对查询时status和title分选上rating,即使使用explain()连同hint()在JavaScript控制台指出使用第二索引是快4倍.
我如何告诉Mongoid告诉MongoDB使用第二个索引?
我有两个js文件,每个文件都有自己的window.onload处理程序。根据我将两个onload处理程序附加到窗口对象的方式,我在第二个处理程序上得到了不同的行为。
更具体地说,这是我的html文件:
<html>
<head>
<title>Welcome to our site</title>
<script type="text/javascript" src="script1.js"> </script>
<script type="text/javascript" src="script2.js"> </script>
</head>
<body id="pageBody">
<h2 align="center">
<a href="http://www.whatever.com" id="redirect"> Wellcome to our site... c'mon in! </a>
</h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它加载两个js文件,script1.js和script2.js。
这是这两个脚本的版本,它们导致(至少在我看来)意外的行为。
Script1.js:
window.onload = initAll1(); // attach first onload handler
function initAll1() {
alert("initAll1");
document.getElementById("redirect").onclick = foo; // attach an onclick handler
}
function foo() {
alert("we are in foo");
return false;
}
Run Code Online (Sandbox Code Playgroud)
Script2.js:
addOnloadHandler(initAll2); // with this we should attach a second onload handler …Run Code Online (Sandbox Code Playgroud) 我做了一个小函数,给定一个元组,比较这个元组中的所有元素是否具有相同的符号.
例如,元组= [-1, -4, -6, -8]好,而[-1, -4, 12, -8]坏.我不确定我是否做了最聪明的实现,所以我知道这是要问的地方.
def check_consistent_categories(queryset):
try:
first_item = queryset[0].amount
if first_item < 0:
for item in queryset:
if item > 0:
return False
return True
else:
for item in queryset:
if item < 0:
return False
return True
except:
return False
Run Code Online (Sandbox Code Playgroud) 每当我们在setter中调用PropertyChanged时MVVM Light中没有简写,就像在flex [Bindable]中一样:
[PropertyChanged]
public bool IsEditable { .... }
Run Code Online (Sandbox Code Playgroud)
为什么我们每次都要写PropertyChanged("IsEditable"),它容易出错,哪些可以默认.
我正在为Delphi中的未读消息检查器应用程序做一些有趣的事情.我正在使用Indy 10.我可以连接Gmail并可以检索所有消息,但我在这里遇到问题:我无法判断消息是否已被读取.TidMessage组件中有一个标志属性,它应该告诉我消息是否已被读取.代码如下所示:
procedure TForm1.btTestConnectionClick(Sender: TObject);
var
i: Integer;
count: Integer;
flag: TIdMessageFlags;
begin
if (pop3Test.Connected) then begin
pop3Test.Disconnect;
end;
pop3Test.Username := edAccount.Text;
pop3Test.Password := edPassword.Text;
pop3Test.Host := HOST;
pop3Test.AuthType := patUserPass;
pop3Test.Port := PORT;
pop3Test.Connect;
Count := 0;
for i := pop3Test.CheckMessages downto 1 do begin
pop3Test.Retrieve(i, IdMessage1);
if (mfSeen in IdMessage1.Flags) then begin
Count := Count + 1;
end;
end;
ShowMessage(IntToStr(Count));
pop3Test.Disconnect;
end;
Run Code Online (Sandbox Code Playgroud)
在测试邮箱中有一条未读消息,但所有检索到的消息都将标志枚举属性设置为空,因此结果始终为0.我做错了什么?这是Indy/Gmail兼容性的问题吗?
谢谢.
编辑:我肯定做错了,因为使用Hotmail帐户进行测试会显示相同的空标题属性问题.
我会尽量让自己变得清晰.让我们从头开始.我有一个带有tableview的应用程序,其中包含一个距myLocation有距离的地方列表.现在,每当我在gps位置获得更新时,我都会运行以下代码
- (void)locationUpdate:(CLLocation *)location {
myLocation = location;
for (Trek * trek in list) {
CLLocation *loc = [[CLLocation alloc] initWithLatitude:[trek latitude_start] longitude:[trek longitude_start]];
double dis = [locationManager getDistance: loc];
[trek setDistance:dis];
[trek setDistanceUnit];
[loc release];
}
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
现在这段代码[trek setDistanceUnit];调用
-(void) setDistanceUnit {
if (self.distance < 1000.0)
self.distanceString = [NSString stringWithFormat:@"%.0lf m", self.distance];
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我只distanceString使用应用程序崩溃.现在我认为这可能与这些更新可能同时(并行)运行视图绘制单元格所需的访问这一事实有关.任何人有任何想法?我可以发布更多代码,如果有用,我只是不想过多发布这篇文章太久了.
我试着到处寻找,但到目前为止我找不到任何东西.
在此先感谢,翁贝托
PS现在应用程序正在运行,但我想了解发生了什么.
为什么'[self.pickerSubArray indexOfObject:self.txtSubCategory.text]'返回'2147483647'; 而相同的字符串值参数'[self.pickerSubArray indexOfObject:@"Mark"]'会根据需要调出4?
正如主题所暗示的那样,当将大量数据序列化到文件时,我遇到了一个与boost :: serialization有关的问题.问题在于应用程序序列化部分的内存占用量大约是序列化对象内存的3到3.5倍.
值得注意的是,我所拥有的数据结构是基类指针的三维向量和指向该结构的指针.像这样:
using namespace std;
vector<vector<vector<MyBase*> > >* data;
Run Code Online (Sandbox Code Playgroud)
稍后将使用与此类似的代码序列化:
ar & BOOST_SERIALIZATION_NVP(data);
Run Code Online (Sandbox Code Playgroud)
包括boost/serialization/vector.hpp.
被序列化的类都继承自"MyBase".
现在,从我的项目开始,我已经使用不同的档案从典型的binary_archive,text,xml和最后的多态二进制/ xml /文本进行序列化.这些中的每一个都以完全相同的方式行事.
通常情况下,如果我必须序列化少量数据,但我所拥有的类数量达到数百万(理想情况下大约为10亿),并且我已经能够测试它的内存使用率一直显示在编写文件时,boost :: serialization部分代码分配的内存大约是应用程序整个内存占用量的2/3.
这相当于大约13.5 GB的RAM用于4百万个对象,其中对象本身需要4.2GB.现在这是因为我无法访问具有超过8GB物理RAM的计算机,因此我可以使用我的代码.我还应该注意,这是一个在Windows 7专业版x64版本上运行的64位应用程序,但在Ubuntu盒子上的情况类似.
任何人都知道我将如何对此进行故障排除,因为对于一个应用程序具有如此高的内存要求是不可接受的,该应用程序在运行时不会像在序列化时那样使用尽可能多的内存.
反序列化并不是那么糟糕,因为它分配的内存大约是所需内存的1.5倍.这是我可以忍受的.
尝试使用boost :: archive :: archive_flags :: no_tracking关闭跟踪,但它的行为完全相同.
任何人都知道我应该做什么?
如何生成随机字符串?我写了以下内容,结果只给了我一封信!
declare @alphaCount int
set @alphaCount = @alphaCount +1
CHAR(@alphaCount)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
如果用户成功输入密码和用户名,并且您要设置会话,会话应包含哪些数据?我对此很困惑,我读过它应该是一个随机生成的字符串,我可以存储哈希的user_id + salt吗?我希望能够验证这确实是正确的用户:
表格:
<form method="POST" action="">
<input type="hidden" name="auth_token" value="<?php echo $form_token; ?>">
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" name="action" value="Login">
</form>
Run Code Online (Sandbox Code Playgroud)
我想做类似以下的事情:
if form token in session = form_token var in form
if username and password are correct
set session hash(user_id + salt)
Run Code Online (Sandbox Code Playgroud)
编辑:忘记添加,它很可能是在共享主机上.