node和mongo:使用id

时间:2016-06-03 20:41:11

标签: javascript node.js mongodb mongoose mean-stack

我有两个系列。 1)通知 2)论坛

这些集合的模式存在于单独的js文件notifications.js和forum.js中,如下所示

notifications.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);

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);

论坛集合如下所示:

  {  "_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。

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数组元素转换为ObjectIds
notificationids.map(function(o){return mongoose.Types.ObjectId(o);});

但是,正如所料,这给出了一个错误:

mongoose.Types.ObjectId错误“传入的参数必须是12个字节的单个字符串或24个十六进制字符的字符串”);

我也尝试将objectids存储为字符串,但dint也可以工作。

提前感谢。

0 个答案:

没有答案