我正在使用mongoose
并在我的应用中为评论部分定义了一个模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var CommentSchema = new Schema({
my_username: {type: String, required: true},
text_content: {type: String},
hashtags: {type: [String]},
photo_content: {type: String},
created_at: {type: Date, default: Date.now},
updated_at: {type: Date, default: Date.now}
});
现在,当我下载属于特定时间范围的所有评论并包含主题标签时,我有:
var hashtagsInput = req.body.hashtags;
var query= {};
query.$and = [];
if(startDate != undefined && endDate != undefined) {
var startDate = new Date(req.param('startDate'));
var endDate = new Date(req.param('endDate'));
query.$and.push({"created_at":{$gte: startDate}});
query.$and.push({"created_at":{$lte: endDate}});
}
if (hashtagsInput != undefined) {
var hashtags = hashtagsInput.split(",");
query.$and.push({"hashtags":{$in: hashtags}});
}
现在我正在尝试向查询添加另一个案例 - 除了一组主题标签我正在传递被阻止用户数组:
var blockedUsers = req.body.blockedUsers;
我想避免每个评论都与authorUsers中的任何条目相同。所以基本上我想要not in
查询。你能给我一些如何在我的查询中构建这个附加条件的提示吗?
答案 0 :(得分:3)
看起来这应该可以解决问题:
if (blockedUsers) {
query.$and.push({"my_username": {$not: {$in: blockedUsers}}});
}
或者,甚至更好:
if (blockedUsers) {
query.$and.push({"my_username": {$nin: blockedUsers}});
}
或者您可能需要像使用标签一样在逗号上拆分它 - 您没有指定如何传递被阻止的用户:
var blockedUsers = req.body.blockedUsers;
if (blockedUsers) {
var blocked = blockedUsers.split(',');
query.$and.push({"my_username": {$nin: blocked}});
}
请参阅:https://docs.mongodb.com/manual/reference/operator/query/nin/