如何匹配字段之间的mongodb查询

时间:2017-11-06 13:54:14

标签: node.js mongodb express mongoose

假设我有一个收藏品:

{ id: 0, likes: 1},
{ id: 1, likes: 0},
// ^ it's match
{ id: 2, likes: 0},
{ id: 3, likes: 0}

*喜欢列是要匹配的id列的refeer。 我们知道id:0匹配id:1因为id:0喜欢id:1,而id:0喜欢id:1。要查询我正在使用这个:

现有解决方案但导致应用崩溃

session_store = req.session
User.find({ likes: session_store.id }, (err, data1) => {

    for (user of data1) {
      var idWhoLikesIdSession = user.id

      User.find({
        id: idWhoLikesIdSession,
        likes: session_store.id
      }, (err, data2) => {
        res.json(data2)
      })
    }

})

这实际上有效,但for循环中的User.find会导致应用程序崩溃并重置会话。我需要新的解决方案。

帮助我,谢谢。

1 个答案:

答案 0 :(得分:1)

首先,我想指出你应该知道MongoDB / NoSQL不适合关系数据库设计。使用MongoDB时,可以使用非规范化数据。

  1. 由于您没有提供错误消息/原因导致其崩溃,因此很难说出实际上是什么造成了这种情况。

  2. 您想要的"新"解决方案:您最有可能找到的是populate(),它会在您的查询中执行类似连接的查找。因此,您必须在您的mongoose模式中设计引用。检查mongoose文档:http://mongoosejs.com/docs/populate.html

  3. 编辑:截至您的问题,TGrif已在评论中告诉您,为什么您的解决方案无法正常运行。你正在迭代for循环(它将运行多个User.find(),并且在每个响应中你试图发送一个响应(res.json())。这很可能会抛出异常,如:

      

    响应标头已发送