GAE查询的多重排序

时间:2015-09-22 08:05:15

标签: java google-app-engine

我对GAE数据存储区有这样的查询:

  

SELECT * FROM SimpleEntity WHERE(__key__!= SimpleEntity(" 102")AND __key__   != SimpleEntity(" 104"))ORDER BY SimpleEntity("102"),count

虽然按升序键(自然排序)排序结果,但不遵循按降序排序的计数。场景是实体键是与计数相反的地图,例如count = 9映射到SimpleEntity("104")count = 7映射@SuppressLint("SimpleDateFormat") private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); private Calendar calendar = null; int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); OnDateSetListener dateSetListener = new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { calendar.set(year, monthOfYear, dayOfMonth); //this line save-s the DatePicker selected date to the edittext //you can try with: Date dpDate =new Date(sdf.format(calendar.getTime(); birthDate.setText(sdf.format(calendar.getTime())); } }; final DatePickerFragment datePickerFragment = new DatePickerFragment(StepSettingsView.this, dateSetListener, year, month, day); datePickerFragment.getDatePicker().setMaxDate(new Date().getTime()); datePickerFragment.show(); datePickerFragment.getButton(DatePickerDialog.BUTTON_NEUTRAL).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { birthDate.setText(""); datePickerFragment.dismiss(); } });

这是一个非常粗略的例子,但它显示了我需要做的事情。只是想确保计数排序将是最终排序,但它没有发生。

这是我正在尝试解决的问题的直观视图:

enter image description here

预期的排序是计数升序

1 个答案:

答案 0 :(得分:1)

ORDER BY __key__, count

您的查询首先按__key__排序,然后count排序。这是你看到的结果。由于__key__的性质是唯一的,count字段永远不会用于排序。你不能有重复的密钥。

修改 我刚看了https://cloud.google.com/appengine/docs/java/datastore/queries?hl=en#Java_Sort_orders

  

注意:由于App Engine数据存储执行查询的方式,如果查询指定属性上的不等过滤器并对其他属性排序,则必须在其他属性之前排序不等过滤器中使用的属性。

看起来无法在__key__上使用不等式过滤器执行您想要的操作。您必须在查询之外进行过滤或排序。