2015-08-30 3 views
2

Я новичок в spring-data-mongo. У меня есть следующие документы «Пища», и я хотел бы запросить с помощью Querying Arrys. Я следую за собранием едыspring-data-mongo querying массивы пример

> db.food.find() 
{ "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] } 
{ "_id" : 2, "fruit" : [ "apple", "kumquat", "orange" ] } 
{ "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] } 
> 

И я использую следующий запрос Я получаю правильные данные. Теперь же я хотел бы достичь с помощью Spring-данных-Монго

> db.food.find({fruit : {$all : ["apple","banana"]}}) 
{ "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] } 
{ "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] } 

Пожалуйста, обратитесь мое развитие до сих пор: Food.java

package com.mkyong.model; 
import java.util.List; 
import org.springframework.data.annotation.Id; 
import org.springframework.data.mongodb.core.mapping.Document; 
import org.springframework.data.mongodb.core.mapping.Field; 

@Document 
public class Food { 
    @Id 
    private Double id; 
    @Field 
    private List<String> fruits; 

    public Double getId() { 
     return id; 
    } 
    public void setId(Double id) { 
     this.id = id; 
    } 
    public List<String> getFruits() { 
     return fruits; 
    } 
    public void setFruits(List<String> fruits) { 
     this.fruits = fruits; 
    } 
    @Override 
    public String toString() { 
     return "Food [id=" + id + ", fruits=" + fruits + "]"; 
    } 
} 

FoodRepository:

package com.mkyong.reposiroty; 

import org.springframework.data.repository.CrudRepository; 

import com.mkyong.model.Food; 

public interface FoodRepository extends CrudRepository<Food, String>{ 

} 

SpringMongoConfig .java

package com.mkyong.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.mongodb.config.AbstractMongoConfiguration; 

import com.mongodb.Mongo; 
import com.mongodb.MongoClient; 

@Configuration 
public class SpringMongoConfig extends AbstractMongoConfiguration { 

    @Override 
    public String getDatabaseName() { 
     return "test"; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     return new MongoClient("127.0.0.1"); 
    } 
} 

SpringConfig.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
    xsi:schemaLocation="http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.springframework.org/schema/data/mongo 
      http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <mongo:mongo host="127.0.0.1" port="27017" /> 
    <mongo:db-factory dbname="test" /> 

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
     <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> 
    </bean> 
</beans> 

App.java

package com.mkyong.core; 

import java.util.List; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 
import org.springframework.data.mongodb.core.MongoOperations; 
import org.springframework.data.mongodb.core.query.Criteria; 
import org.springframework.data.mongodb.core.query.Query; 

import com.mkyong.config.SpringMongoConfig; 
import com.mkyong.model.Food; 

public class App { 

    public static void main(String[] args) { 
     ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class); 
     MongoOperations mongoOperations = (MongoOperations) ctx.getBean("mongoTemplate"); 

     Query q = new Query(Criteria.where("fruit").all("apple","banana")); 
     List<Food> foods = mongoOperations.find(q, Food.class); 

     for (Food food : foods) { 
      System.out.println("-------------------"); 
      System.out.println("ID : "+ food.getId()); 
      System.out.println("Fruits : "+ food.getFruits()); 
     } 
    } 
} 

Результат главного metthod, это ничего не тянет. Плоды показывают пусто. Может ли какой-либо эксперт помочь мне извлечь данные из Fruits Array/List? Пожалуйста, дайте мне знать, нужна ли вам какая-либо другая информация?

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
------------------- 
ID : 1.0 
Fruits : null 
------------------- 
ID : 3.0 
Fruits : null 

ответ

0

Да, я могу решить эту ошибку. Требуются следующие изменения:

изменение типа данных в разделе Продовольствие в частные строки [] фрукты;

@Document 
public class Food { 
    @Id 
    private Double id; 
    @Field 
    private String[] fruit; 

    public Double getId() { 
     return id; 
    } 
    public void setId(Double id) { 
     this.id = id; 
    } 
    public String[] getFruit() { 
     return fruit; 
    } 
    public void setFruit(String[] fruit) { 
     this.fruit = fruit; 
    } 
} 

и следующего является выход:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Query : Query: { "fruit" : { "$all" : [ "apple" , "banana"]}}, Fields: null, Sort: null 
------------------- 
ID : 1.0 
Fruits : apple,banana,peach 
------------------- 
ID : 3.0 
Fruits : cherry,banana,apple