【发布时间】:2014-08-14 00:56:50
【问题描述】:
用户可以发送或接收消息,并且无论如何都应该能够归档他/她的消息。
因此,此 .find 应返回 userA 在 to.username 或 from.username 中的任何文档,并带有 view.archive:true。从那里,第二个 $or 应该过滤第一个 $or 的结果,只包含消息为 value.1:true、value.2:true 或 value.3:true 的匹配文档
然而,现在,第一个 $or 上的结束 ] 是 SyntaxError: Unexpected token ]
Models.Messages.find(
{
"$or" : [
{
"to": {
"$elemMatch": {
"username": 'userA',
"view.archive": true,
"view.bin": true
}
}
},
{
"from" : {
"$elemMatch" : {
"username" : 'userA',
"view.archive": true,
"view.bin": true
}
}
}
],
"$or": [
{ 'value.1': true },
{ 'value.2': true },
{ 'value.3': true },
{ 'value.4': false }
]
}
).sort([['updated','descending']]).exec(function (err, messages) {
应该为 userA 找到这两条消息:
{
"_id" : ObjectId("53e83867f316ea7f22fd3b2b"),
"updated" : ISODate("2014-08-11T03:29:06.000Z"),
"message" : "message1",
"value" : [
"1" : true,
"2" : false,
"3" : false,
"4" : false
]
"to" : [
{
"user" : ObjectId("53e835bd76e0d04318d8cc4e"),
"username" : "userA",
"_id" : ObjectId("53e83867f316ea7f22fd3b2c"),
"view" : {
"inbox" : false,
"outbox" : false,
"archive" : true,
"bin" : false
}
}
],
"from" : [
{
"user" : ObjectId("53e8360276e0d04318d8cc55"),
"username" : "userB",
"_id" : ObjectId("53e83867f316ea7f22fd3b2d"),
"view" : {
"inbox" : false,
"outbox" : true,
"archive" : false,
"bin" : false
}
}
],
"__v" : 5
}
{
"_id" : ObjectId("53e83867f316ea7f22fd3b2b"),
"updated" : ISODate("2014-08-11T03:29:06.000Z"),
"message" : "message2",
"value" : [
"1" : false,
"2" : true,
"3" : false,
"4" : false
]
"to" : [
{
"user" : ObjectId("53e8360276e0d04318d8cc55"),
"username" : "userB",
"_id" : ObjectId("53e83867f316ea7f22fd3b2c"),
"view" : {
"inbox" : true,
"outbox" : false,
"archive" : false,
"bin" : false
}
}
],
"from" : [
{
"user" : ObjectId("53e835bd76e0d04318d8cc4e"),
"username" : "userA",
"_id" : ObjectId("53e83867f316ea7f22fd3b2d"),
"view" : {
"inbox" : false,
"outbox" : true,
"archive" : true,
"bin" : false
}
}
],
"__v" : 5
}
【问题讨论】:
-
您忘记在 $or 过滤器之前添加 $and
-
您仍然(不正确地)使用多个
$or字段,就像在您的 previous question 中一样。我的回答没有意义吗? -
@JohnnyHK 你的回答很有意义..谢谢。结果仍然排除了 $from 结果,所以它可能还有其他东西在管道中。所以我决定尝试使用 .find 代替,但认为 $and 隐含在 .find 中
-
@soulcheck 感谢您指出这一点.. 的印象是 $and 隐含在 .find 中