java如何实现mongodb中查询指定字段?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何实现mongodb中查询指定字段?相关的知识,希望对你有一定的参考价值。

参考技术A MongoClient mongoClient=new MongoClient("localhost",27017);//连接数据库
MongoDatabase database=mongoClient.getDatabase("db");//获取数据库
MongoCollection<Document> collection=database.getCollection("集合");//获取集合
System.out.println("请输入需要查询的字段:");
Scanner scanner=new Scanner(System.in);
String j=scanner.next();
FindIterable<Document> docs= collection.find(Filters.eq("字段",j);//查询结果
(这里还有另外一种写法,可以供兄弟参考。
FindIterable f = users.find();
MongoCursor cur = f.iterator();
参考技术B mongodbTemplate,newQuery();fandOne 参考技术C 不知道你描述的啥意思
你是说sql查询某个制定字段么

MongoDB 中嵌入式/嵌套字段的 GraphQL 查询

【中文标题】MongoDB 中嵌入式/嵌套字段的 GraphQL 查询【英文标题】:GraphQL query on Embedded/Nested Field in MongoDB 【发布时间】:2019-08-12 15:49:57 【问题描述】:

如何使用 GraphQL 对 MongoDB 中嵌入/嵌套文档中的字段指定查询条件?

在 mongo shell 中,我可以通过

轻松获取文档
db.users.find( 'contacts.phone': '8148*****'  ).pretty();

这会给我带来记录


        "_id" : ObjectId("5c93c0601a29f5183929c02c"),
        "name" : "Athul",
        "contacts" : 
                "address" : "Some address",
                "phone" : "8148*****",
                "email" : "***@live.com"
        ,
        "__v" : 0

在我的 GraphQL Schema上,我已经定义了如下所述的查询

...
input ContactsInput 
    address: String
    phone: String
    email: String


input userInput 
  name: String
  contacts: ContactsInput


type RootQuery 
  users(user: userInput): [User!]!

....

用户的解析器

...
const User = require('../../models/user');
...
    users: async args => 
        try
            const query = JSON.parse(JSON.stringify(args.user));
            const userList = await User.find(query);

            if(!userList) 
                throw new Error("No user found");
            

            return userList;
         catch(err)
            throw err;
        
    
...

(如果我用名字搜索就可以了)

在 GraphiQL 中,我试图通过以下查询获取相同的记录

query
  users(user: contacts: 
    phone: "8148*****" 
  )
    name
    contacts
      email
      phone
    
  

我无法获得相同的记录。

因为它在后端执行

db.users.find( contacts:  phone: '8148405590'  );

不等价于

db.users.find( 'contacts.phone': '8148*****'  );

你能帮我解决这个问题吗?

【问题讨论】:

您可以编辑您的问题并为users 提供您的解析器吗? @MarcoDaniels 我已经用用户解析器更新了这个问题。 【参考方案1】:

看起来您必须先构建查询对象,然后再将其发送到mongodb

你可以试试这样的:

const tempQuery = 'contacts.phone': args.user.contacts.phone

const query = JSON.parse(JSON.stringify(tempQuery));

您只需要确保输入中存在所有值(user.contacts.phone),如果您想要其他查询,您必须编写所有不同的组合(例如:contacts.email)。

否则,您可以查看有关 GraphQL to MongoDB 和库 graphql-to-mongodb 的博客文章,但要实现它,您可能需要重构一些代码。

【讨论】:

有什么替代品吗?否则我必须以同样的方式处理对contacts.email 和contacts.address 的查询。 @AthulMR 我用可能解决您问题的外部工具更新了我的答案。

以上是关于java如何实现mongodb中查询指定字段?的主要内容,如果未能解决你的问题,请参考以下文章

mongodb如何删除集合中的指定键值对???

mongodb查询,如何只查询出某一个字段的值?

求助啊,tp下,mongodb如何查询后只返回某个字段值

PDI Kettle - 如何在 MongoDB 输出中为查询匹配指定 ObjectId

用mongodb查询的时候,如何只查询出某一个字段的值?

Mongodb模糊查询返回有查询到内容的字段?