这些集合的模式存在于单独的js文件notifications.js和forum.js中,如下所示
var mongoose = require("mongoose");
var notificationSchema = new mongoose.Schema(
{
username: String,
message: String,
date: Date,
deleted: String,
commentids: [{id:String}]
});module.exports = mongoose.model('notifications', notificationSchema);
var mongoose = require("mongoose");
var notificationSchema = new mongoose.Schema(
{
username: String,
message: String,
date: Date,
deleted: String,
commentids: [{id:String}]
}); module.exports = mongoose.model('notifications', notificationSchema);
论坛集合如下所示:
{ "_id" : ObjectId("5751e2b315cdbc58164df7cd"),
"notificationids" : [
ObjectId("5751e2be15cdbc58164df7d0"),
ObjectId("5751e2c415cdbc58164df7d1")
],
"__v" : 0
}
notificationids是论坛集合中的一个数组,用于存储相应通知的ID。
和通知集合如下所示
{
"_id" : ObjectId("5751e2be15cdbc58164df7d0"),
"username" : "ab",
"message" : "hello",
"date" : ISODate("2016-06-03T20:04:14.487Z"),
"deleted" : "false",
"commentids" : [ ],
"__v" : 0
}
{
"_id" : ObjectId("5751e2c415cdbc58164df7d1"),
"username" : "ab",
"message" : "how are you",
"date" : ISODate("2016-06-03T20:04:20.769Z"),
"deleted" : "false",
"commentids" : [ ],
"__v" : 0
}
现在我必须在mongoose中编写一个查询来选择所有“通知”文档,其“_id”存在于forumss集合的notificationids数组中。 即,因为这里的notificationids = [ObjectId(“5751e2be15cdbc58164df7d0”), 的ObjectId( “5751e2c415cdbc58164df7d1”)], 查询必须将通知集合的所有文档作为ID返回 通知集合中包含5751e2be15cdbc58164df7d0和5751e2c415cdbc58164df7d1
我在nodejs中编写了一个像这样的文件server.js。
var ForumModel = require('../models/forum');
var NotificationModel=require('../models/notifications');
var mongoose=require("mongoose");
ForumModel.find({_id:"5751e2b315cdbc58164df7cd"},function(err,data)
{
if(err)
{
console.log("couldnot load the group forum");
}
else
{
console.log("forum notificationids are"+data);
//the below query returns result as empty
NotificationModel.find({'_id':{$in:data}},function(err,result)
{
if(err)
{
console.log("couldnot load notifications "+err);
}
else
{
console.log("notifications are sent to the clientand result is"+result);
}
});
}
运行时上述代码的输出为:
论坛通知ID是 {notificationids:[5751e2be15cdbc58164df7d0, 5751e2c415cdbc58164df7d1], __v:0, _id:5751e2b315cdbc58164df7cd } 通知发送到客户端,结果是
你可以清楚地看到结果是空的。我duno我做错了。我尝试使用
将notificationids数组元素转换为ObjectIdsnotificationids.map(function(o){return mongoose.Types.ObjectId(o);});
但是,正如所料,这给出了一个错误:
mongoose.Types.ObjectId错误“传入的参数必须是12个字节的单个字符串或24个十六进制字符的字符串”);
我也尝试将objectids存储为字符串,但dint也可以工作。
提前感谢。