MongoDB基于对象数组查找

时间:2015-12-28 19:03:13

标签: mongodb

我有一个像这样的帖子文件

contact

我的用户文档看起来像

ui-sref="contacts"

如何选择用户ID不在author: '828287', content: 'xyz', time: 88273622324 字段中的作者的所有帖子?

编辑:此外,我如何选择被阻止的作者的所有帖子,但前提是帖子的时间早于阻止时间?这意味着阻止用户只会阻止将来的帖子和现有帖子不会受到影响。

1 个答案:

答案 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"] }}
]

这应该有助于您理解查询