Node.js 使用.find({})方法时,Nodejs找不到文档

Node.js 使用.find({})方法时,Nodejs找不到文档,node.js,mongodb,mongoose,dao,Node.js,Mongodb,Mongoose,Dao,我正在尝试使用mongoose/nodejs和mongoDB执行一个简单的.find()。我的收藏(show)中有一个文档(带有字段“date”:“09-20-2019”),但我似乎无法通过编程方式找到它 我曾尝试使用MongoDB compass(db viewer软件)来搜索我正在寻找的内容。我进入我的收藏{date:“09-20-2019”}下的搜索框,我能够使用他们的搜索功能找到文档,因此我知道它应该可以工作。我已检查“日期”字段是否作为“09-20-2019”的正确格式和值出现在后端节

我正在尝试使用mongoose/nodejs和mongoDB执行一个简单的.find()。我的收藏(show)中有一个文档(带有字段“date”:“09-20-2019”),但我似乎无法通过编程方式找到它

我曾尝试使用MongoDB compass(db viewer软件)来搜索我正在寻找的内容。我进入我的收藏{date:“09-20-2019”}下的搜索框,我能够使用他们的搜索功能找到文档,因此我知道它应该可以工作。我已检查“日期”字段是否作为“09-20-2019”的正确格式和值出现在后端节点服务器上。我正在使用Node.js 10.15.1

--This is from my route.js file
router.get('/shows/:date', (req, res, next)=>{
    //res.send('Retrieving the shows list');

    console.log('back end date: ' + req.params.date);

    Show.find({date: req.params.date}, function(err, result){
        if (err)
        {
            res.json(err);
        }
        else {
            console.log(result);
            res.json(result);
        }
    })
});

我希望.find({})操作返回一个来自我的mongoDB的文档,日期为'09-20-2019',这是目前该集合中唯一的文档。集合中最终将存在多个文档。

请在数据库中检查是否存在类似“02/03/1995”的日期格式,可以通过保存,您正在更改格式。如果没有,请共享架构的一个对象

这在我的模式中正常工作

db.getCollection('users').find({dob:'02/03/1995'})
另请参见:-查询日期时,使用实际日期。查询objectid时,使用真实的objectid。等等,因为你的字符串实际上是最糟糕的日期格式。具体地说:不遵循从最不特定到最特定(年、月、日)的顺序将阻止任何形式的排序、范围查询,或者基本上阻止任何“最有用”的事情,当实际日期存储为字符串时,这通常不是日期的适当存储格式


“2019/09/21”
=11字节。使用儒略历表示的同一日期:
2458748
,或32位整数(4字节),无时间成分。UNIX时间戳是64位的,所以是8个字节,您还必须丢弃或忽略其中的时间组件。即使是错误的正确方式也比错误的错误方式好

检查数据库中的日期是iso日期还是iso字符串格式。
如果是iso日期,则必须执行新日期(2019年9月20日)
如果它是ISO字符串,那么你也需要考虑时区。 尝试使用介于09-20-2019和09-21-2019之间的查询进行查找。

您应该获得数据。

什么是集合名称?它与
Shows
不同吗?集合名称似乎是Shows。第一次这样做时,我将新集合手动输入mongoDB compass。看起来这可能就是问题所在?我创建了一个POST端点来创建一个“Show”,并让它自己创建集合,现在它就可以工作了。但是现在我不明白为什么集合被称为“Show”,而模式被称为“Show”?这种命名惯例从何而来@SandeepPatel感谢第一个参数是您的模型所针对的集合的单数名称。**Mongoose会自动查找模型名称的复数小写版本。请看这个。如果要覆盖默认模型,可以将第三个参数作为集合名称传递。例如
mongoose.model('ModelName',Schema,collectionName)
<代码>09-20-2019==
-2030
==1969年12月31日星期三,美国东部时间18:59:57 UTC-0500。因此,给出的代码是相当严重的错误。此外,人们总是需要考虑时区。UTC中的存储和传输是最佳实践,因为“时区”(并非真正的时区)不会受到夏令时的影响(年中没有重复或丢失的小时数),从而使给定的时间或日期绝对且明确。在“橡皮鸭调试”中,我向母亲介绍了这一点(实际上,她非常容易地摸索ObjectId/datetime转换问题)甚至她也认识到,如果对这些日期进行排序,每年9月的每个日期都会分组在一起,然后每年10月的每个日期都会分组在一起,然后……这个日期字符串立即提出了一个挑战性问题:{有效地,没有正则表达式}给我找到2019年1月至3月之间的所有文档。祝你好运。(对于大多数用户来说,它基本上是无用的,而且会浪费存储空间,请参阅我的答案。)
--This is from my service.ts file
  getShow(date)
  {
    var headers = new Headers();
    headers.append('Content-Type', 'application/json');
    //date is in format MM/dd/yyyy (e.g. 09-20-2019)
    return this.http.get<Show>('http://localhost:3000/api/shows/' + date);
  }
--This is from my component
    this.commentCardService.getShow(this._date).subscribe(data => {
      console.log(data);
    });
db.getCollection('users').find({dob:'02/03/1995'})