这是关于stackoverflow的一个非常类似的问题,但由于某种原因,这不起作用。我花了很多时间没有成功。
这是我的收藏设置
{
"_id" : ObjectId("5715acfcf1dbdc7c0ae94379"),
"users":[ObjectId("570d2308ba5bc6842242e881"),
ObjectId("570d7e4b369ac0c525e98331")
],
"messages" : [
{
"user" : ObjectId("570d2308ba5bc6842242e881"),
"message" : NumberInt(0),
"readInd" : "N",
"createDate" : ISODate("2016-04-19T03:59:12.587+0000"),
"_id" : ObjectId("5715ad10f1dbdc7c0ae94396")
},
{
"user" : ObjectId("570d2308ba5bc6842242e881"),
"message" : NumberInt(1),
"readInd" : "N",
"createDate" : ISODate("2016-04-19T04:11:10.541+0000"),
"_id" : ObjectId("5715afdef36f23a10ad12348")
},
{
"user" : ObjectId("570d2308ba5bc6842242e881"),
"message" : NumberInt(2),
"readInd" : "N",
"createDate" : ISODate("2016-04-19T04:11:11.756+0000"),
"_id" : ObjectId("5715afdff36f23a10ad12352")
}
]
}
这是我的代码片段与mongoose
var objId = new ObjectID("5715acfcf1dbdc7c0ae94379");
chatModel.aggregate([
{ "$match": { "users": {'$in':[objId]}} },
{
"$project": {
"messages":1
}
}
,{"$sort": {"messages.createDate": -1} }
],function(err,records) {
if (err) {
return res.json({status: false, errCode: 900, errMsg: err});
}
res.json({status:true,resData:records}) ;
});
谢谢,
答案 0 :(得分:0)
我在这里看到两个问题。
您的匹配项与您的数据结构不符。您应该针对message.user
而不是users
进行测试:
{ "$match": { "messages.user": {'$in':[objId]}} }
您正在使用与_id
字段匹配的ObjectId进行测试,而不是user
字段。您应该针对570d2308ba5bc6842242e881
进行测试,而不是5715acfcf1dbdc7c0ae94379
。
如果您想针对_id
进行测试,那么您的匹配将如下所示:
{ "$match": { "_id": {'$in':[objId]}} }