我确定这对于大多数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'})
什么都没有。
答案 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
!