gpt4 book ai didi

node.js - 如何修改我的 mongodb 查询以使结果不包含存储在数组中的特定值?

转载 作者:可可西里 更新时间:2023-11-01 10:02:45 24 4
gpt4 key购买 nike

我正在使用 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;

我想避免每条评论的作者都等于 blockedUsers 中的任何条目。所以基本上我想要 not in 查询。您能告诉我如何在我的查询中构造这个附加条件吗?

最佳答案

看来这应该可以解决问题:

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/

关于node.js - 如何修改我的 mongodb 查询以使结果不包含存储在数组中的特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40742665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com