我有一个像这样的帖子文件
contact
我的用户文档看起来像
ui-sref="contacts"
如何选择用户ID不在author: '828287',
content: 'xyz',
time: 88273622324
字段中的作者的所有帖子?
编辑:此外,我如何选择被阻止的作者的所有帖子,但前提是帖子的时间早于阻止时间?这意味着阻止用户只会阻止将来的帖子和现有帖子不会受到影响。
答案 0 :(得分:2)
这应该有效
映射用户的被阻止属性(我假设您可以将其解析为数组):
var blockedUsers = user.blocked.map(function (b) {
return b.user; //if b.user is a number and author is a string then use return b.user.toString() instead
});
查询db ...
db.posts.find({author: {$nin: blockedUsers}});
修改强>
尝试使用此功能进行编辑
var condition = user.blocked.map(function (b) {
var aux = { $and: [ { author: b.user }, { time: {$lt: b.time} } ] };
return aux;
});
var blockedUsers = user.blocked.map(function (b) {
return b.user; //if b.user is a number and author is a string then use return b.user.toString() instead
});
condition.push({ author: {$nin: blockedUsers }});
db.posts.find({$or: condition });
变量condition
最终看起来像这样
[
{$and: [ {author: "123214"}, {time: { $lt: 88273626362 } } ] },
{$and: [ {author: "345654"}, {time: { $lt: 88273698678 } } ] },
{$and: [ {author: "554568"}, {time: { $lt: 88273658858 } } ] },
{author: {$nin: ["123214", "345654", "554568"] }}
]
这应该有助于您理解查询