小编And*_*len的帖子

mongoose与文档截然不同

我有以下型号:

var followerSchema = new Schema({
    id_follower: {type: Schema.Types.ObjectId, ref: 'Users'},
    id_post: {type: Schema.Types.ObjectId, ref: 'Posts'}
});
Run Code Online (Sandbox Code Playgroud)

我希望能够找到关注者列表的所有帖子.当我使用find时,它当然会多次返回同一个帖子,因为多个用户可以关注相同的帖子.

所以我尝试使用distinct,但我觉得"填充"后来不起作用.

这是我的代码:

followerModel
    .distinct('id_post',{id_follower:{$in:followerIds}})
    .populate('id_post')
    .sort({'id_post.creationDate':1})
    .exec(function (err, postFollowers) {
        console.log(postFollowers);
    })
Run Code Online (Sandbox Code Playgroud)

它只返回帖子的数组,并且没有填充.

我是mongoDB的新手,但根据mongoose的文档,"distinct"方法应该返回一个查询,就像"查找"方法一样.在查询中,您可以执行"填充"方法,因此我看不出我做错了什么.

我也尝试使用查询的.distinct()方法,所以我的代码是这样的:

followerModel
    .find({id_follower:{$in:followerIds}})
    .populate('id_post')
    .distinct('id_post')
    .sort({'id_post.creationDate':1})
    .exec(function (err, postFollowers) {
        console.log(postFollowers);
    })
Run Code Online (Sandbox Code Playgroud)

在这种情况下它可以工作,但是在mongoose的文档中,当你在查询中使用distinct方法时,你需要提供一个回调函数,所以在我的日志中我总是得到错误.一个解决方法是有一个虚拟回调函数,但我想避免...

有没有人知道为什么第一次尝试不起作用?如果第二种方法可以通过提供虚拟回调来接受?

mongoose mongodb node.js

11
推荐指数
1
解决办法
6796
查看次数

连接到不同命名空间时的 socketIO 握手行为

我在使用 socketIO (nodejs) 和使用多个命名空间时遇到问题。也许我误解了如何使用它,但这就是我理解它应该如何工作的方式。

服务器端(nodejs)

io.of('/game').on('connection', socket => {
    console.log(socket.handshake.query);
    console.log('user connected to game socket', socket.id);
})

io.of('/api').on('connection',socket => {
    console.log(socket.handshake.query);
    console.log('user connected to api socket', socket.id);
}
Run Code Online (Sandbox Code Playgroud)

客户端(浏览器)

function test (){    
    gameSocketTest = io.connect('http://localhost:4003/game',{query:{test:'test'}});
    apiSocketTest = io.connect('http://localhost:4003/api');       
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,查询(我只发送到“游戏”命名空间)到达两个处理程序,也是 api 之一。

如果我将客户端代码的顺序反转为:

function test (){
    apiSocketTest = io.connect('http://localhost:4003/api');        
    gameSocketTest = io.connect('http://localhost:4003/game',{query:{test:'test'}});    
}
Run Code Online (Sandbox Code Playgroud)

握手中的查询在两个处理程序服务器端都是空的。所以我的结论是,两个连接都会以某种方式使用相同的握手(但是两者的套接字 ID 不同)。

“uberhaupt”有可能做我想做的事吗?如果是这样,我对这种奇怪的握手行为不理解什么。

根据我的理解,在客户端调用“io.connect()”应该创建 2 个独立的套接字 io 客户端,每个客户端都有自己的握手。

谢谢你的帮助!

安德里斯

node.js socket.io

5
推荐指数
1
解决办法
1245
查看次数

标签 统计

node.js ×2

mongodb ×1

mongoose ×1

socket.io ×1