如何制定使用子对象字段返回游标的查询?
我的对象结构如下所示:
_id: "4ncBGvppEs92e4tcZ"
expiryDate: "2017-05-27T21:45:57+03:00"
viewStatisticsArray: Array[1]
0: Object
nrOfViews:155
statesDate:"Fri Mar 24 2017 12:46:21 GMT+0300 (EAT)"
viewedBy: "udEnfEmy5DSBvDsSy"
请注意,viewedBy
(我也称之为子对象)值包含从Meteor.user()._id;
生成的用户ID
var MyUserId = Meteor.user()._id;
我没有尝试过:
Db.find({},{viewedBy: { $in: MyUserId } } ).fetch();
也没有尝试过:
Db.find({},{viewStatisticsArray.viewedBy: { $in: MyUserId } } ).fetch();
请帮忙!如何正确地对上述查询进行论坛? 预期的结果应该在光标中装满只有已经被查看过的对象:" udEnfEmy5DSBvDsSy"。
答案 0 :(得分:1)
在mongodb(以及Meteor)中,执行此类查询的正确方法是使用$elemMatch
运算符。例如,您的查询将如下所示。
Db.find({
viewStatisticsArray: {
$elemMatch: {
viewedBy: MyUserId
}
}
});
但是,由于您只需要指定单个查询谓词,因此您也可以使用以下查询。
Db.find({
'viewStatisticsArray.viewedBy': MyUserId
});
提醒一句,我不知道minimongo(在流星应用程序中运行客户端的mongodb)是否支持$elemMatch
运算符。如果是这种情况,并且如果您在客户端上执行此查询,则必须使用上面的第二个选项。