如何创建搜索和数组数组的查找

时间:2014-11-23 09:38:52

标签: meteor

我使用以下代码为我的meteor应用程序创建了一个种子。

if (Years.find().count() === 0) {
    for (y = 1905; y < 2015; y++ ) {
        Years.insert({
            year: y
        }); 
    }
}

然后,我想在我的应用程序中的find语句中引用_id或year字段。

我所看到的是种子在我看来是一个数组数组

我试图运行一个看起来像这样的查询。

Years.find().fetch()

这返回了数组数组

Years.find().fetch();
 Array[110]
  [0 … 99]
    0: Object
     _id: "hPXZuc54irJQ78mQ5"
     year: 1905
     __proto__: Object
    1: Object
     _id: "Z7nuSCRA8W7nn9j92"
     year: 1906
     __proto__: Object
  [100 … 109]
  length: 110

然后我尝试使用$ elemMatch来搜索stackoverflow。

Years.find({year: {$elemMatch:{ year: "1988" } } });

这就是我的回归

LocalCollection.Cursor {collection: LocalCollection, sorter: null, _selectorId: undefined, matcher: Minimongo.Matcher, skip: undefined…}
_selectorId: undefined
_transform: null
collection: LocalCollection
  _docs: LocalCollection._IdMap
    _idParse: function (id) {  // 1079                                                             
   _idStringify: function (id) {  // 1054
   _map: Object
     2BiEQnaFo37MfXgZo: Object
     2LXuNkpH3uq27Wobw: Object

是否有更好的种子方法?或者我是否需要改变查询方式?

1 个答案:

答案 0 :(得分:1)

您的收藏实际上是每年一份文件。

.fetch()生成所有文档的数组

您还将您的年份作为数字插入,因此您需要使用数字

进行查询

你的elemmatch查询真的没有意义,它试图查询&#34;年&#34;每个文档中的数组,并不存在。一年是一个数字,而不是你定义它的数组。

所以你可以做到

Years.findOne({year: 1988})

要了解mongo(存储数据的地方)的用途,请转到mongo控制台

项目文件夹中的

meteor mongo

然后你可以做

meteor:PRIMARY> db.years.find().pretty()

你应该看到一堆文件,如: -

{ "year" : 1905, "_id" : "XEyPJnQeFpzxwWnWT" }
{ "year" : 1906, "_id" : "eT6Ctz5yQpZ5FpDuE" }
{ "year" : 1907, "_id" : "7jwaxumxT73X9fAK2" }
{ "year" : 1908, "_id" : "aoMJhnNBaMBv2u9ip" }
{ "year" : 1909, "_id" : "Doyta3rnXE5NvwFTY" }
{ "year" : 1910, "_id" : "uHxAsxcyi9GNYeTbN" }
{ "year" : 1911, "_id" : "BG7AmXxdMRjDLG7cp" }