gpt4 book ai didi

node.js - Mongoose 内连接

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:00 25 4
gpt4 key购买 nike

用户集合

user : {
"_id" : md5random,
"nickname" : "j1",
"name" : "jany"
}
user : {
"_id" : md5random,
"nickname" : "j2",
"name" : "jenneffer"
}

友情收藏

friendship : {
"_id" : md5rand,
"nick1" : "j1",
"nick2" : "j2",
"adTime" : date
}

例如 SQL

SELECT friendship.adTime, user.name 
FROM friendship
INNER JOIN user ON
(user.nickname=friendship.nick1 or user.nickname=friendship.nick2)

MONGO中有什么办法可以得到这个SQL结果吗?

我想得到结果,我知道 mongo 不支持这个请求。但这个更好的解决方案是什么?任何人都可以为我写一个例子吗?

最佳答案

MongoDB 是面向文档的,而不是关系数据库。所以它没有像sql这样的查询语言。因此您应该更改数据库架构。

这是一个例子:

  1. 定义您的架构。你不能像在 SQL 数据库中那样在 mongodb 中保存关系。所以直接将好友添加到用户中。要向这些关系添加属性,您必须创建一个新模型(此处:Friend)。

    var userSchema = mongoose.Schema({
    nickname: String,
    name: String,
    friends: [{type: mongoose.Schema.Types.ObjectId, ref: 'Friend'}]
    });

    var friendSchema = mongoose.Schema({
    user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    addTime: Date
    });

    var User = mongoose.Model('User', userSchema);
    var Friend = mongoose.Model('Friend', friendSchema);

获取所有 addTimes 的查询可能如下所示:

User.find().populate('friends').exec(function(err, users) {
if (err) throw err;

var adTimes = [];
users.forEach(function(user) {
user.friends.forEach(function(friend) {
adTimes.push(friend.adTime);
});
});

response.send(adTimes); // adTimes should contain all addTimes from his friends
});

注意:上面的模式应该可以工作,但也许你应该使用关系数据库(如MySQL)或图形数据库(如Neo4j)而不是面向文档的数据库MongoDB

关于node.js - Mongoose 内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com