【发布时间】:2016-09-25 19:19:44
【问题描述】:
这是文档的结构。
{
"_id" : ObjectId("5548f1cc0dcd6bd925a71ae2"), //document id
"messages" : [
{
"subject" : "NEW ++ SUBJECT",
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5548f1cc0dcd6bd925a71ae3"),
"created" : ISODate("2015-05-05T16:37:32.832Z"),
"read" : false,
"message" : "FIRST MESSAGE",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
},
{
"subject" : "dfgsd",
"from" : ObjectId("5534b2992a104ed914435c98"),//logged In USer
"_id" : ObjectId("5548f1df0dcd6bd925a71ae4"),
"created" : ISODate("2015-05-05T16:37:51.455Z"),
"read" : false,
"message" : "rdfgdgfd",
"participants" : [
ObjectId("5534b2992a104ed914435c98"),//logged In USer
ObjectId("5530af38576214dd3553331c")
]
}
"participants" : [
ObjectId("5534b2992a104ed914435c98"),//logged In USer
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
],
"__v" : 3
}
我想获取消息数组的消息对象,其“读取”值为“假”且“来自”不等于登录用户(此处登录用户为 5534b2992a104ed914435c98)。并且文档的“参与者”数组必须包含登录的用户 ID(5534b2992a104ed914435c98)。这是我尝试的查询。
db.conversations.find({participants:ObjectId('5534b2992a104ed914435c98'),'messages.read':false,'messages.from':{$ne:ObjectId('5534b2992a104ed914435c98')}}).pretty().
基本上我正在尝试获取未读消息的计数。 我对 mongodb/mongoose 很陌生。如果您发现问题有问题,请纠正我。
【问题讨论】:
-
所以在你上面的例子中什么都不会返回?我也对您如何存储数据感到有些困惑(该文档代表什么?)似乎最后的
participants也应该有31c。 -
请给我一个给出所需结果的查询。???你能告诉我们你的尝试吗,好像你一直在发布类似的问题,但没有对所提供的答案提供反馈。
-
@ExplosionPills :是的,我现在已经修改了。
-
@chridam:很抱歉反馈迟了。这是我尝试过的代码。 db.conversations.find({participants:ObjectId('5534b2992a104ed914435c98'),'messages.read':false,'messages.from':{$ne:ObjectId('5534b2992a104ed914435c98')}}).pretty() 请纠正我如果我错了
-
@chridam 感谢您的回复。我现在已经编辑了