mongo集群查询 报错 ‘use geoNear command rather than $near query‘ on server xxxx

springboot整合mongo集群
对mongo中ibike下的bike进行地理位置查询
已添加索引 db.bike.ensureIndex({loc:"2d",status:1})
测试报错 ‘use geoNear command rather than $near query’ on server xxxx’…

配置代码:

	@Bean    //  MongoTemplate由spring 托管
	    @Primary
	    public MongoTemplate template() {
	        return new MongoTemplate(factory());
	    }
	
	 /**
     * 功能描述: 创建数据库名称对应的工厂,数据库名称可以通过配置文件导入
     * @param
     * @return:org.springframework.data.mongodb.MongoDbFactory
     * @since: v1.0
     */
	    @Bean("mongoDbFactory")
	    public MongoDbFactory factory() {
	        return new SimpleMongoDbFactory(client(), "ibike");
	    }
	    
	    /**
	     * 功能描述: 配置client,client中传入的ip和端口可以通过配置文件读入
	     *
	     * @param
	     * @return:com.mongodb.MongoClient
	     */
	    @Bean("mongoClient")
	    public MongoClient client() {
	    	List<ServerAddress> list=new ArrayList<ServerAddress>();
	    	ServerAddress sa1=new ServerAddress("192.168.146.200",23000);
	    	ServerAddress sa2=new ServerAddress("192.168.146.201",23000);
	    	ServerAddress sa3=new ServerAddress("192.168.146.202",23000);
	    	list.add( sa1 );
	    	list.add( sa2 );
	    	list.add( sa3 );
	    	return new MongoClient(   list );
	    	//return new MongoClient("192.168.146.200", 27017);
	    }

业务代码:

@Override
	public List<Bike> findNearAll(Bike bike) {
		
		Point point = new Point(bike.getLatitude(), bike.getLongitude());
		Query q=new Query(   
				    Criteria.where("loc").near(point)
				            .maxDistance(20)
				         )
				            .limit(10);
		
		List<Bike> list = mongoTemplate.find(  q, Bike.class);
		for (Bike b : list) {
			b.setBid(b.getId());
			b.setLatitude(b.getLoc()[0]);
			b.setLongitude(b.getLoc()[1]);
		}

		return list;
	}

测试代码:

@Test
		public void testNearBikes() {
			Bike b=new Bike();
			b.setLatitude(28.16942263);
			b.setLongitude(112.9838513);
			b.setLoc(null);
			List<Bike> list=bikeService.findNearAll(b);
			System.out.println(list);
			
		}

报错原因:

ibike下的bike集合在先前执行了分片命令db.runCommand({"shardcollection":"ibike.bike","key":{_id:'hashed'}})
应该是导致索引方面的问题出错 从而报错(具体原因?)
但仍然需要对库进行分片db.runCommand({"enablesharding":"ibike"})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值