2014-02-06 60 views
2

我想查询sailsjs中的mongodb。 这是我的数据库的结构sailsjs数组查询完全匹配

{ 
    "users": [ 
     "52ed09e1d015533c124015d5", 
     "52ed4bc75ece1fb013fed7f5" 
    ], 
    "user_msgs": [ 
     { 
      "sender": "52ed09e1d015533c124015d5", 
      "sendTo": "52ed4bc75ece1fb013fed7f5", 
      "msg": "ss" 
     } 
    ], 
    "createdAt": ISODate("2014-02-06T16:12:17.751Z"), 
    "updatedAt": ISODate("2014-02-06T16:12:17.751Z"), 
    "_id": ObjectID("52f3b461f46da23c111582f6") 
}

我想要搜索这些“用户”谁谁匹配阵列

 [ 
     "52ed09e1d015533c124015d5", 
     "52ed4bc75ece1fb013fed7f5" 
    ]
 
Message.find({user: ["52ed09e1d015533c124015d5","52ed4bc75ece1fb013fed7f5"]})

该查询返回一个包含1或2中的所有对象..但我只需要那些exacly比赛1和2, 我也曾尝试$一切,等等。但没有工作 请告诉我如何写查询与sailsjs支持了Syntex让这些用户

回答

1

你需要使用本地蒙戈适配器这样的:

Message.native(function(err, collection) { 

    collection.find({users:{'$all':["52ed09e1d015533c124015d5","52ed4bc75ece1fb013fed7f5"]}}).toArray(function(err, results) { 

    // Do something with results 

    }); 

}); 
-1
Message.find() 
.where({users: "52ed09e1d015533c124015d5", "52ed4bc75ece1fb013fed7f5"}) 
.exec(function(){ 
    // do something 
}); 

虽然上面的代码可能工作只吸引那些用户。我认为更好的解决方案是在消息模型中定义用户标识。

我想补充以下属性邮件型号:

senderID: { 
    type: 'string' 
}, 
receiverID: { 
    type: 'string' 
} 

现在您可以进行查询更高效使用下面的查询:

Message.find() 
.where({senderID: "52ed09e1d015533c124015d5"}) 
.where({receiverID: "52ed4bc75ece1fb013fed7f5"}) 
.exec(function(){ 
    // do something 
}); 

这是我走的路线。

+0

谢谢您的回答。但它并没有为我工作。上面的模式,我为mongodb允许1-1和多用户chat..like组conversation.in“用户”数组,我想stroe那些在这chat.and用户ID,而在我想要的EXACT数组用户..其中也返回所有对象谁拥有其中之一 –

+0

这是不正确的语法:'.where({users:“52ed09e1d015533c124015d5”,“52ed4bc75ece1fb013fed7f5”}) –