MongoDB:如何在文档数组元素中搜索

时间:2018-03-09 19:41:24

标签: node.js mongodb mongoose

我确定这对于大多数Mongo用户来说都是一个微不足道的问题,但是,我找不到正确的答案是不吉利的。 我有一些文件,如

{
  _id:"2a1fd96c-73c5-49e1-a8ca-bd03a20c0197",
  timestamp:1519725979178,
  storeID:"xxx",
  unitID: "yyy",
  status:[1, 0, 1, 0],
  _rev:"1-8019f22bf26b4d6cb99ae5460b3e0c65"
}

我需要找到所有文件:

storeID = "xxx" AND unitID = "yyy" AND status[2] = 1

我的过滤器条目适用于Compass

{'status.2': 1,storeID:'xxx',unitID:'yyy'}

但是,当我尝试将其转换为Js代码

Model.find({'status.2': 1,storeID:'xxx',unitID:'yyy'})

什么都没有。

1 个答案:

答案 0 :(得分:0)

经过几个小时的拔毛后,我把问题解决了。 过滤查询 {'status.2':1,storeID:'xxx',unitID:'yyy'}{'status.2':{$eq:1},storeID:'xxx',unitID:'yyy'}实际上还可以。

不幸的是,我使用了.find()和模型而不是在集合范围内调用它:

let mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    MyShema = new Schema({/* definition */}),
    Model = mongoose.model('MyShema'),
    filter = {'status.2':1,storeID:'xxx',unitID:'yyy'};


// BEFORE
let cursor = Model.find(fd); //returns total=0


// AFTER
let cursor = Model.collection.find(fd); //returns total=80

cursor.count()
    .then(total=>console.log('total',total))
    .catch(error=>console.log(error));

当我从过滤选项中删除'status.2':1时,奇怪的是,游标的两个实例都返回了相同数量的文档。 原因如此可怜 - status在Schema中声明为String,而显然应该是Array