Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是查询MongoDB的最佳结构吗?_Javascript_Mongodb_Mongoose_Nosql - Fatal编程技术网

Javascript 这是查询MongoDB的最佳结构吗?

Javascript 这是查询MongoDB的最佳结构吗?,javascript,mongodb,mongoose,nosql,Javascript,Mongodb,Mongoose,Nosql,我正试图找到哪种方法更具可扩展性。 我有一个用户在拼车旅行中申请了一个座位,用户需要能够查看适用于他们的所有旅行。我的模型是这样的: var UserSchema = new mongoose.Schema({ id: String, name: String, trips: [String] // An array of strings, which holds the id of trips }); var TripSchema = new mong

我正试图找到哪种方法更具可扩展性。 我有一个用户在拼车旅行中申请了一个座位,用户需要能够查看适用于他们的所有旅行。我的模型是这样的:

var UserSchema = new mongoose.Schema({
   id: String,
   name: String,
   trips: [String]            // An array of strings, which holds the id of trips
});

var TripSchema = new mongoose.Schema({
   id: String,
   description: String,
   passengers: [String]       // An array of strings, which holds the id of users
});
因此,当用户查看适用于他们的所有行程时,我的后端将搜索Mongo数据库中的所有行程。 我决定采用两种方法:

  • 搜索所有行程并返回用户id位于乘客数组中的行程
  • 搜索所有行程并返回id与用户行程数组中的id匹配的行程

  • 我认为方法2更好,因为它不必在旅行模型中进行更深入的搜索。我只是在寻求确认,想知道还有什么我需要考虑的吗?

    < P>如果你不做大数据,我会简单地说,这没什么关系——两者都足够好,但是如果你真的有上百万的用户对数百万用户的查询和TRIPS……/P>
    • 对于选项1,您只有一个查询,但您必须确保您的字段
      passengers
      已编制索引,因此您需要维护另一个索引,以提高效率。另一个索引会影响您的写入性能
    • 对于选项2,您始终必须执行两个查询。 首先在用户集合中查询用户对象,然后在样式的查询中执行
      ,从
      user.trips
      加载与任何TripID匹配的行程项目。您将在始终索引的
      \u id
      字段上查询。当然,当您总是加载您的用户时,只有一个查询真正起作用
    <>你还必须考虑代码< >写< /> >还是<代码> Read < /Cord>性能更重要。对于
    write
    ,您的模型效率很低,因为对于每次新的旅行,您都需要更新两个集合(旅行和用户)。因此,目前您的写操作增加了一倍,而且通常写操作比读操作更昂贵


    最后:拥有易于维护的代码比一点性能更重要-->只需使用mongoose
    populate
    功能,一切都会自动完成。不要将引用存储为字符串,而是将其存储为ObjectId类型,并在模型中使用
    ref
    keywoard。

    太棒了,这正是我所希望的洞察力!在我的范围内,与微不足道的读改进相比,我更喜欢写性能。我还没有使用猫鼬填充功能,但我一定会研究它。谢谢你,雷托!:)顺便说一句,这本书对你来说可能是一本好书——这本书出自有史以来最著名的计算机科学家之一:“过早优化是万恶之源”哈哈,这本书将是一本好书