天道酬勤,学无止境

mongodb

Query for similar array in MongoDB

问题 我想在我的 MongoDB 集合中搜索具有相似数组的文档,并按相似值排序。 示例: 我会搜索{chars:['a', 'b', 'c']} 我已经存储了这些文件: 1. {chars:['s', 'e', 'c']} 2. {chars:['i', 'l', 'd']} 3. {chars:['b', 'a', 'c']} 4. {chars:['f', 'c', 'b']} 我想得到一些 ORDERED 之类的东西: [ {chars:['b', 'a', 'c'], similarity: 1.0}, {chars:['f', 'c', 'b'], similarity: 0.66}, ... ] 我应该使用哪种运算符或查询策略来获得类似的东西? 谢谢! 回答1 感谢所有试图帮助我的人。 我感谢您的帮助。 我通过聚合管道找到了解决方案。 var myArray = ['a', 'b', 'c']; db.test.aggregate([ { $unwind: '$chars', }, { $match: { chars: { $in: myArray } }, }, { $group: { _id: '$_id', count: { $sum: 1 }, }, }, { $project: { _id: 1, count: 1, score: { $divide: ['

2022-07-11 09:54:54    分类:技术分享    arrays   mongodb

JSON .NET Custom Name Resolver for Sub-Properties

问题 我有一个 API,它从 MongoDB 返回一个 JSON 对象,其中一个属性是“开放式”文档,这意味着它可以是该属性的任何有效 JSON。 我不知道这些属性的名称是什么,它们可以是任何字符串。 我只知道这个特定的属性需要被序列化,它是如何存储在数据库中的。 因此,如果最初存储的属性名称是“Someproperty”,则 JSON 中的序列化响应需要是“Someproperty”,而不是“someProperty”。 我们有这样的配置: ContractResolver = new CamelCasePropertyNamesContractResolver(); 在我们的 CustomJsonSerializer 中,但是在返回“开放式”JSON 时会弄乱响应的格式。 实际上,我们希望响应与它们在 MongoDB (BSON) 中的存储方式完全相同,但所有这些属性都是驼峰式的。 我知道这些值在通过数据库存储/检索时保持它们的大小写,所以这不是问题。 我如何告诉 JSON.net 从本质上绕过特定数据点的所有子属性的 CamelCasePropertyNameResolver? 编辑:只是为了提供更多信息,并分享我已经尝试过的内容: 我想过像这样覆盖 PropertyNameResolver: protected override string

2022-07-11 09:53:26    分类:技术分享    c#   json   mongodb   json.net

How MongoDB Choose Candidate Plans

问题 我的应用程序中有一个缓慢的查询。 创建两个索引后,它在本地数据库中使用它们以提高性能。 但是当我部署在生产数据库上时,它仍然使用原始索引。 在这下面我做了什么。 收集tasks中的属性: team_id 、 project_id 、 created_by和assignee等。 查询如下所示 db.tasks.find({ team_id: new ObjectId(teamId), $or: [ { project_id: newObjectId(projectId), created_by: userId }, { assignee: userId } ] }) 最初只有一个针对team_id的索引,它将检查超过 10k 文档。 然后我添加了两个新索引 project_1_created_by_1: { project: 1, created_by: 1 } assignee_1: { assignee: 1 } 在本地数据库中,我使用explain({ verbose: true })运行查询。 我可以看到 MongoDB 评估的索引 [ QueryOptimizerCursor: [ 'project_1_created_by_1', 'assignee_1', ], BtreeCursor: 'team_1' ] 最后QueryOptimizerCursor赢了。

2022-07-11 09:51:46    分类:技术分享    mongodb   mongodb-indexes

select sum column and group by with Mongodb and Laravel

问题 我的查询有问题: 我想要 SELECT "user_info" 和 SUM "amount" 和 GROUP BY "user_id" 我正在使用 Laravel 5 和jenssegers/laravel-mongodb 太感谢了。 回答1 http://laravel.io/forum/10-05-2014-raw-select-using-jenssegers-laravel-mongodb 检查上面的链接或在我写的时候使用它。 $total = DB::table('user_info')->sum('amount')->groupBy('user_id')->get(); 回答2 为了获得更好的性能,请使用底层 MongoDB 驱动程序的聚合框架方法,因为它使用 MongoDB 服务器上的本机代码,而不是基本上包装 mapReduce 方法的.groupBy()方法。 考虑以下聚合操作,它使用$group管道和$sum运算符进行 sum 聚合: db.collectionName.aggregate([ { "$group": { "_id": "$user_id", "user_info": { "$first": "$user_info" }, "total": { "$sum": "$amount" } } } ]); 等效的 Laravel 示例实现:

2022-07-11 09:51:06    分类:技术分享    php   mongodb   laravel   aggregation-framework   jenssegers-mongodb

Combining Spring-Data for MongoDB and ElasticSearch

问题 我正在努力 @org.springframework.data.mongodb.core.mapping.Document(collection = "goal") @org.springframework.data.elasticsearch.annotations.Document(indexName = "goal") public class Goal implements Serializable { ....} 但这给了我: Error creating bean with name 'goalRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property insert found for type Goal! -> 顺便说一句:只要我将名为“插入”的属性添加到目标或从目标中删除弹性搜索注释,该错误就会消失。 目标存储库是: package org.jhipster.mongo.repository; import org.jhipster.mongo.domain.Goal; import org.springframework.data

2022-07-11 09:48:20    分类:技术分享    java   spring   mongodb   spring-data-mongodb   spring-data-elasticsearch

Morphia datastore.save() behaviour

问题 我们使用 morphia 0.109 来插入记录,使用以下语法: AdvancedDatastore datastore = MongoDbFactory.getDatastore(); datastore.save(collectionName, pojo); 似乎当对象在 mongodb 中尚不存在时,morphia 首先发出删除然后发出插入请求? 解决这个问题的唯一方法是专门使用 java 中的.insert和.update方法而不是.save吗?

2022-07-11 09:41:49    分类:技术分享    java   mongodb   morphia

cosmos db api for mongo db facing issue for some commands

问题 我正在使用 azure cosmosdb mongo api 并且无法在其上运行波纹管命令。 在本地托管的 mongo 服务上执行时运行良好。 有什么办法吗? db.getCollection('requests').update( {claims: { $elemMatch: { id:1000 }}}, {$set:{"claims.$.billForMonth":"1"}} ) 我的数据是 { "_id" : NumberLong(1000), "location" : "pune", "claims" : [ { "id" : NumberLong(1000), "type" : "broadband", "billForMonth" : 4 }] } 回答1 我可以重现我这边的问题,当我进行以下更新操作时,它表明我已经成功更新了数据。 但是如果我查询数据,我发现billForMonth没有更新。 如果我更新一个非数组字段(例如location字段),它可以正常工作。 db.testc1.update( {claims: { $elemMatch: { id:1000 }}}, {$set:{"location":"pune1"}} ) cosmos db:mongo api 现在好像不支持Array Update ,以后会支持这个功能。 您将在本文中找到以下信息。

2022-05-17 05:09:13    分类:技术分享    mongodb   azure-cosmosdb

Mongodb was hacked, how to create new user and is there a way to recover?

问题 我试图访问一个我已经使用了数周的旧 mongodb 服务器。 但是 RoboMongo 和 3TStudio 都被拒绝了,所以我用 putty 登录发现了这个: > show dbs; WRITE_ME 0.000GB admin 0.000GB local 0.000GB thaihome 0.000GB 这看起来就像我们被黑客入侵了,这真的很奇怪,因为 mongodb 密码很长并且充满了数字/字母/字符等。所以我们不知道他们是如何进入的。 我确实有所有内容的备份,所以没有造成任何伤害(除了伤害自尊心呵呵)。 问题:现在admin里什么都没有,那么我如何从例如Robomongo或Studio3T登录到数据库? 如何创建用户以便再次登录? 问题2:debian/ubuntu 是否有取消删除命令或其他方式来恢复已删除的数据? (如果不是,我将从备份中恢复,但这需要时间) 回答1 首先,我建议您更改mongodb服务器的密码(我想您现在应该已经这样做了)。 其次,我建议您将 mongodb 端口从default(27017)更改为其他端口。 当您的 mongodb 服务器托管在默认端口 27017 上时,最容易破解。检查此链接以更改端口。 接下来,我会建议您仅授予某些 IP 的访问权限,以便只有这些 IP 可以访问您的数据库,从而减少被黑客入侵的机会。 一种方法是bind

2022-05-17 03:49:11    分类:技术分享    mongodb

update multi records and insert if not present

问题 可以说我的测试数据是 db.multiArr.insert({"ID" : "fruit1","Keys" : "apple"}) db.multiArr.insert({"ID" : "fruit2","Keys" : "carrot"}) db.multiArr.find({'ID': {$in: ['fruit1', 'fruit2']}}) 如果我想更新或插入一个 ID,我可以使用 db.multiArr.update( {'ID': "fruit12"}, { 'ID': "fruit12" "$push": { "Keys": "tomato" } }, upsert=True ) 我想更新或插入多条记录,我知道下面的查询只插入 1 行 db.multiArr.update( {"ID": {"$in: ["fruit123", "fruit1234"]}}, {"ID": "---", "Keys": "tomato"}, upsert=true ) 有没有办法更新/插入多条记录? 回答1 您对此的想法是错误的。 相反,您采用“数组”并将其转化为操作。 您不是发送多个“请求”,而是在“一个请求”中发送多个“操作”。 使用 .bulkWrite() 进行批量操作 var newKeys = ["fruit123", "fruit1234" ]; db

2022-05-17 02:38:23    分类:技术分享    mongodb   mongodb-query

Returning specific fields with mongoose

问题 我正在尝试完成一些非常容易但仍然失败的事情。 我想要做的是,当我在服务器上收到get请求时,我想返回所有文档,但只返回填充的特定字段。 我的架构如下 var clientSchema = new Schema({ name:{ type: String, required: true }, phone:{ type: String, required: true }, email:{ type: String, required: true }, address: { type: String, required: false } }); var orderDetailsSchema = new Schema({ //isn't added to frontend confirmed:{ type: Boolean, required: true, default: false }, service:{ type: String, required: true }, delivery:{ type: String, required: false }, payment:{ type: String, required: false }, status:{ type: String, required: true, default: "new order" }, }); var

2022-05-17 01:20:03    分类:技术分享    javascript   node.js   mongodb   mongoose   mongoose-schema