使用嵌入式文档在mongodb中建立多对多关系,以实现更好的搜索性能

时间:2018-01-17 10:13:09

标签: java mongodb

背景

我正在尝试使用嵌入式文档模型来建模多对多关系。

选择mongodb背后的原因是因为该平台是动态的,因为该平台处理各种产品和服务。

用户登录时的应用程序会引导用户的所有信息。但是,所有查询(如更新,搜索)主要完成与平台上用户相关的产品和服务。

问题陈述:

@Getter
@Setter
@ToString(exclude = { "id", "password" })
@Document(collection = "users")
public class User implements Serializable {

    @Id
    private ObjectId id;
    @Indexed(unique = true)
    private String username;
    private String password;
    private String email;
    private String mobile;
    private Sex sex;
    private List<String> tags;

}

public class Product {

    @Id
    private String id;
    private String name;
    private double price;
    private List<User> users;
}

public class Service{

    @Id
    private String id;
    private String name;
    private double price;
    private List<User> users;
}

最初我想过将用户作为产品和服务中的嵌入式文档。选择嵌入式文档设计的原因是在搜索过程中避免多次查询。

但是,我也意识到当用户登录到应用程序时,我需要拥有需要引导的所有用户相关信息。设计似乎变得越来越复杂。

我想了解是否可以更好地处理这种情况。谁已经解决了这种情况?

我想要执行的查询是

查找

db.products.find({"name": /.*m.*/})

更新

 .update(Products:{$elemMatch:{Bag:"charollette"}}, {$set: {'Products.$.Name':"Charollette blue"}});

插入:

db.products.insertOne( { item: "card", qty: 15 } );

0 个答案:

没有答案