我通過互聯網上的大量資源閱讀,並遵循大量關於如何在特定日期範圍內查找集合的示例,但它沒有奏效。我的代碼如下: -流星db.find與json中的日期作爲選擇器不工作
var fromAge = 18;
var toAge = 22;
Meteor.users.find({:profile.birthday":{$lt: new Date(new Date().setYear(new Date().getFullYear() - fromAge)), $gt: new Date(new Date().setYear(new Date().getFullYear() - toAge))}).fetch();
上面的查詢返回一個空的集合,當我做一個簡單的Meteor.users.find()獲取()的一個記錄在其下方並返回: - 。
{"_id": 123452345, "profile.birthday": ISODATE("1975-10-22T00:00:00Z")}
調試,我也寫在javascript控制檯以及後端服務器mongo外殼以下的查詢,它也沒有返回空集合。
JavaScript控制檯
Meteor.users.find({"profile.birthday": {$lt: new Date()}})
服務器的MongoDB殼牌
db.users.find{"profile.birthday": {$lt: new Date()}})
我不知道現在。如果有人能夠啓發我,那將是非常棒的。
- UPDATE -
我想下面的查詢,它沒有返回任何結果
db.users.find({"profile.birthday":{$lt: new Date(new Date().setYear(new Date().getFullYear() - 18)).toISOString()}})
我在JavaScript控制檯
new Date(new Date().setYear(new Date().getFullYear() - 18)).toISOString()
命令類型的,它確實告訴我
"1997-11-06T16:35:28.844Z"
而且它是我的數據庫,生日的記錄應該是「1975-10-22T00:00:00Z」,因此它應該打這個記錄,但我所能擁有的只是一個空的集合。
有人告訴我使用ISODate(),我嘗試了下面的命令,它在MongoDB Shell中工作,但它產生ISODate未定義在我的Meteor幫助函數中。
db.users.find({"profile.birthday":{$lt: ISODate("1977-11-06")})
讀過將向您介紹一些其他資源(Inserting and Querying Date with MongoDB and Nodejs),並得知我應該使用日期,而不是ISODate因此ISODate是內部的MongoDB和流星有利於做日期到ISODate轉換。然後我試圖硬編碼查詢和它沒有正常工作: -
db.users.find({"profile.birthday": {$lt: new Date("1977-11-06T00:00:00.000Z")}})
- UPDATE BEGIN(二〇一五年十一月一十六日) -
它正常工作,而我的問題是,我想建立JSON的選擇,然後把它放到雖然這不會工作,查找: -
selector={"profile.birthday": {$lt: new Date("1977-11-06T00:00:00:000Z"}};
db.users.find(selector);
上面的查詢返回的什麼都沒有。
- 更新的最終(2015年11月16日) -
我這樣做,因爲我有年齡組的下拉列表,我試圖構建查詢通的輔助活動。下面我有一個下拉的模板: - /client/ageRangeDropdown.html
<template name="AgeRangeDropdown">
<div class="btn-group">
Age Group
<select id="ageRangeDropdownList" class="form-control">
<option >Whatever</option>
<option >18-22</option>
<option >23-27</option>
<option >28-32</option>
<option >33-37</option>
<option >38-42</option>
<option >43-47</option>
<option >48-52</option>
<option >53-57</option>
</select>
</div>
{{#each currentCriterias}}
<span class="label label-info">{{criteria}}</span>
{{/each}}
{{#each myUser}}
{{profile.firstName}} , {{profile.lastName}}, {{profile.birthday}}
{{/each}}
</template>
及以下
/client/ageRangeDropdown.js
Template.ageRangeDropdown.events({
'change ageRangeDropdownList': function(e) {
for (var key in target) {
if (!target.hasOwnProperty(key)) {
if (key=='id') {
id = target[key];
}
}
}
var value = target.options[target.selectedIndex].value;
if (value!='Whatever') {
currentCriterias.push({id: "profile.birthday", criteriaValue: value});
}
var query = [];
for (var i = 0; i < items.length; i++) {
var itemObject = {};
var fromAge = currentCriterias[i]['criteriaValue'].substr(0,2);
var toAge = currentCriterias[i]['criteriaValue'].substr(3,2);
itemObject['profile.birthday'] = {
$gt: new Date(new Date().setYear(new Date().getFullYear() - fromAge)),
$lt: new Date(new Date().setYear(new Date().getFullYear() - toAge))
}
query.push(itemObject);
}
var selector = [];
selector.push({$or: query});
Template.instance().selector.set({$or: selector});
return false;
})
Templage.ageRangeDropdown.created = function() {
var instance = this;
instance selector = new RactiveVar([]);
instance.autorun(function() {
var selector = instance.selector.get();
if (typeof selector != 'undefined' && Object.keys(selector).length > 0) {
var subscription = instance.subscribe('searchUser', selector);
}
});
instance.myUser = function() {
var selector = instance.selector.get();
if (typeof selector != 'undefined' && Object.keys(selector).length > 0) {
return Meteor.users.find(selector, {fields: {profile: 1}});
}
}
}
服務器/ serverpublish.js
助手Meteor.publish("searchUser", function(selector){
if (!this.userId) {
console.log("Cannot search User when you haven't logged in.");
return null;
} else {
if (typeof selector != 'undefined' || Object.keys(selector).length > 0) {
var user=Meteor.users.find(selector, {fields: {profile: 1}});
return user;
} else {
console.log("won't publish all user profiile when no selector is given");
return null;
}
}
});
邏輯就是這樣,實際上我有很多下拉每個wh ich將構成查詢的一部分,我使用實例反應變量設置查詢,以便每當它發生變化時,流星將再次執行meteor.find。除了這個生日是一個日期,每個下拉菜單都可以正常工作。任何人都知道發生了什麼問題?
所有這一切都在你的數據庫中包含所需的用戶的理念前提。你有什麼證據表明它的確存在?此外,您是否將其中的任何一項發佈給客戶?你的問題的表述方式,聽起來像'Meteor.users.find()。count()'將在客戶端返回1,並且這個記錄超出了你的日期範圍。 –
這就是因爲我已經手動輸入一個測試記錄到數據庫的生日在18-22年齡範圍內。 '{「_id」:123452345,「profile.birthday」:ISODATE(「1975-10-22T00:00:00Z」)}'。但是我無法獲得查詢的格式來返回這條記錄。 – frankcheong
而問題是我無法在服務器mongodb外殼上找到這條記錄,因此我很確定問題出在查詢本身。 – frankcheong