草庐IT

arrays - mongodb - 如果数组中的元素之一与查询匹配,则忽略文档

我在用户集合中有一个用户对象,如下所示:{"username":"bahramhasanov","sessions":[{"time":"2018-12-1012:30"},{"time":"2018-10-1113:30"}]}现在我想获取在“2018-10-01”和“2018-10-15”之间没有任何session的用户。当我使用$elemMatch和$not查询时,我得到了bahramhasanov,因为他的session超出了这个日期范围。我使用了这个查询:db.users.find({sessions:{$elemMatch:{"time":{$not:{$gt:ISODat

如果所有键都作为字段存在,则 MongoDB 过滤器

我想过滤所有键(以列表格式存在)作为字段存在的文档。我可以使用字段作为键之一一个接一个地查询多次{field:{$exists:}}不过这样好像效率不是特别高。我也担心速度。即使一些键被索引,它本质上是线性搜索吗?此外,是否有一个简单的语法来查询是否有任何键作为字段存在?编辑:举个例子,假设keys=['key1','key2','key3']。现在,我想过滤所有包含“key1”、“key2”和“key3”字段的文档。 最佳答案 你在这里真正的意思是$all运算符(operator):db.collection.find({"key

node.js - 不存在则插入,存在则更新

这个问题在这里已经有了答案:Howtoupdateifexistsotherwiseinsertnewdocument?(4个答案)关闭3年前。我正在从这个API获取用户。https://redmine-mock-api.herokuapp.com/api/v1/users一共有100个(100个不同的id)。我使用Mongoose将它们添加到我的mongodb数据库中,但问题是它总是在添加(我已经有5000个用户(50次重复100个用户)如果id不存在我想添加,如果存在则更新。我做错了什么?users是API中的用户数组db.collection("users").insertMan

mongodb - Mongoose:原子 FindOne-Or-Insert(),如果找到则不更新现有实例

在Mongoose中,我正在寻求以原子方式执行Model.FindOne-Or-Insert()的方法,与当前可用的功能和签名类似Model.FindOneAndUpdate()除非实例存在(即匹配filter),否则不要使用提供的object进行更新,而是按原样返回实例,如果不存在(即不匹配filter)然后插入object并返回新实例。我找不到使用Model.FindOneAndUpdate()的方法不要通过尝试对其选项的变化来执行对现有实例的更新,并且不向object提供字段,如果实例存在则不希望更新。因此,我当前的非原子解决方法是Model.FindOne()如果没有找到,则执

javascript - 过滤子文档数组,如果为空则仍返回父数据

我正在使用这个问题HowtofilterarrayinsubdocumentwithMongoDB中的方法它按预期工作,除非数组中的所有元素都不匹配测试。在这种情况下,我只会得到一个没有父数据的空数组。示例数据{"_id":"53712c7238b8d900008ef71c","dealerName":"TestDealer","email":"test@test.com","address":{..},"inventories":[{"title":"active","vehicles":[{"_id":"53712fa138b8d900008ef720","createdAt":"

node.js - 如果字段设置为 null,则恢复为 mongoose 中的默认值

我在nodeJS中使用mongoose。考虑以下架构:varPersonSchema=newmongoose.Schema({"name":{type:String,default:"Human"},"age":{type:Number,defualt:20}});mongoose.model('Person',PersonSchema);varorder=newOrder({name:null});这将创建一个名称设置为null的新Person文档。{name:null,age:20}有没有检查正在创建/更新的属性是否为空,如果为空,则将其设置回默认值。以下声明varorder=ne

mongodb - 如果没有包含数组的相应查询字段,则无法应用位置运算符

我有以下文件:{"id":"1","name":"Paul","a":{"b":[{"name":"laura","lastname":"Palmer"}]}}现在我想更新b中的每个姓氏。我试过这个:db.organizations.update({"name":"Paul","a.b":{$exists:true}},{"$set":{"a.b.$.lastname":"no_lastname"}});但是我得到:如果没有包含数组的相应查询字段,则无法应用位置运算符。有人知道我应该做什么吗? 最佳答案 您可以使用cursor.fo

python - 如果值不匹配则更新文档

在Mongodb中,如果文档的一个字段存在,如何跳过更新?举个例子,我有以下文档结构,如果link键不匹配,我只想更新它。{"_id":{"$oid":"56e9978732beb44a2f2ac6ae"},"domain":"example.co.uk","good":[{"crawled":true,"added":{"$date":"2016-03-16T17:27:17.461Z"},"link":"/url-1"},{"crawled":false,"added":{"$date":"2016-03-16T17:27:17.461Z"},"link":"url-2"}]}我的

arrays - 如果存在则将对象插入数组,否则在 MongoDB 中设置对象

这是我目前拥有的文件:{"_id":"","title":"MyWatchlist","series":[{"seriesId":1,"following":true,"seasons":[]},{"seriesId":1,"following":false,"seasons":[]}]}如您所见,当前有2个对象的seriesId为1,但后面的bool值不同。如果查询与_id匹配,它应该将新对象推送到系列中,如果在“series”数组中已经存在具有相同“seriesId”的对象,它应该更改该对象中的字段,而不是添加一个新的对象。我目前有以下查询:users.update({"_id":

mongodb - 如果在数组中找不到匹配项,则返回第一个元素

我有以下文件:{_id:123,state:"AZ",products:[{product_id:1,desc:"P1"},{product_id:2,desc:"P2"}]}我需要编写一个查询来返回产品数组中的单个元素,其中state为“AZ”且product_id为2。如果未找到匹配的product_id,则返回产品数组中的第一个(或任何)元素.例如:如果product_id为2(找到匹配项),则结果应为:products:[{product_id:2,desc:"P2"}]如果product_id为3(未找到),则结果应为:products:[{product_id:1,desc