相关疑难解决方法(0)

MongoDB:使用同一文档中的数据更新文档

我有一个文档列表,每个文档都有lat和lon属性(等等).

{ 'lat': 1, 'lon': 2, someotherdata [...] } 
{ 'lat': 4, 'lon': 1, someotherdata [...] }
[...]
Run Code Online (Sandbox Code Playgroud)

我想修改它,使它看起来像这样:

{ 'coords': {'lat': 1, 'lon': 2}, someotherdata [...]} 
{ 'coords': {'lat': 4, 'lon': 1}, someotherdata [...]}
[...]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个:

db.events.update({}, {$set : {'coords': {'lat': db.events.lat, 'lon': db.events.lon}}}, false, true)
Run Code Online (Sandbox Code Playgroud)

但它将db.events.latdb.events.lon视为字符串.如何引用文档的属性?

干杯.

mongodb

74
推荐指数
3
解决办法
6万
查看次数

在Mongodb中按字段乘以字段

我一直在寻找一种方法来创建一个更新语句,该语句将使用现有的数字字段并使用表达式对其进行修改.例如,如果我有一个名为Price的字段,是否可以进行将Price设置为现有值50%的更新?

所以,给定 { Price : 19.99 }

我想做 db.collection.update({tag : "refurb"}, {$set {Price : Price * 0.50 }}, false, true);

可以这样做,还是我必须将值读回客户端,修改,然后更新?我想问题就是可以在更新中使用表达式,并且它们可以引用正在更新的文档.

mongodb

29
推荐指数
3
解决办法
3万
查看次数

使用文档中的另一个字段值更新字段

我有一个集合t1,其架构中包含以下字段

_id, field1, field1
Run Code Online (Sandbox Code Playgroud)

我希望set field2的值field1类似于sql:

update t1 set field1=field2;
Run Code Online (Sandbox Code Playgroud)

我如何在MongoDB中执行此操作?

mongodb mongodb-query

28
推荐指数
2
解决办法
3万
查看次数

根据MongoDB的当前值更新MongoDB中的值

我想做这样的事情,但this似乎没有在update语句中设置关键字.

db.items.update({foo:…}, {$set: {bar: this.foo}}, false, true)

我必须用它eval来完成这个吗?

mongodb

23
推荐指数
2
解决办法
2万
查看次数

将新字段添加到具有现有字段值的集合中

我想在集合中添加一个新字段,新字段的值设置为现有字段的值.

具体来说,我想从这里开始:

# db.foo.findOne()
    {
        "_id"     : ObjectId("4f25c828eb60261eab000000"),
        "created" : ISODate("2012-01-29T16:28:56.232Z"),
        "..."     : ...
    }
Run Code Online (Sandbox Code Playgroud)

对此:

# db.foo.findOne()
    {
        "_id"      : ObjectId("4f25c828eb60261eab000000"),
        "created"  : ISODate("2012-01-29T16:28:56.232Z"),  
        "event_ts" : ISODate("2012-01-29T16:28:56.232Z"),  #same as created
        "..."      : ...
    }
Run Code Online (Sandbox Code Playgroud)

(此集合中的新文档不会都具有这种特殊的冗余,但我想为现有文档执行此操作)

mongodb

20
推荐指数
1
解决办法
2万
查看次数

MongoDB - 错误:getMore命令失败:找不到光标

我需要sid在大约500K文档的集合中为每个文档创建一个新字段.每个sid都是独一无二的,并基于该记录的现有roundedDatestream字段.

我正在使用以下代码:

var cursor = db.getCollection('snapshots').find();
var iterated = 0;
var updated = 0;

while (cursor.hasNext()) {
    var doc = cursor.next();

    if (doc.stream && doc.roundedDate && !doc.sid) {
        db.getCollection('snapshots').update({ "_id": doc['_id'] }, {
            $set: {
                sid: doc.stream.valueOf() + '-' + doc.roundedDate,
            }
        });

        updated++;
    }

    iterated++;
}; 

print('total ' + cursor.count() + ' iterated through ' + iterated + ' updated ' + updated);
Run Code Online (Sandbox Code Playgroud)

它起初效果很好,但几个小时后大约有100K记录,它出错了:

Error: getMore command failed: {
    "ok" : …
Run Code Online (Sandbox Code Playgroud)

cursor mongodb node.js mongodb-query

20
推荐指数
1
解决办法
2万
查看次数

MongoDB:使用另一个字段的值更新字段

使用 Mongo shell,我尝试添加一个与集合中所有文档的现有字段具有相同值的字段。假设我们有两个文档:

{
   'foo': 'str1'
}
Run Code Online (Sandbox Code Playgroud)

{
   'foo': 'str2'
}
Run Code Online (Sandbox Code Playgroud)

我想插入一个新字段'foo_new',其值分别为'foo',以便文档成为

{
   'foo': 'str1'
   'foo_new': 'str1'
}
Run Code Online (Sandbox Code Playgroud)

{
   'foo': 'str2'
   'foo_new': 'str2'
}
Run Code Online (Sandbox Code Playgroud)

我用来在 Mongo shell 中更新集合(例如“coll”)的命令是

db.coll.update({}, {$set: {'foo_new': '$foo'}}, {multi: true})
Run Code Online (Sandbox Code Playgroud)

运行该命令的结果是两个更新的文档

{
   'foo': 'str1'
   'foo_new': '$foo'
}
Run Code Online (Sandbox Code Playgroud)

{
   'foo': 'str2'
   'foo_new': '$foo'
}
Run Code Online (Sandbox Code Playgroud)

ie'$foo'由于某种原因被解释为文字。

mongodb mongodb-query

11
推荐指数
1
解决办法
2万
查看次数

使用MongoDB自引用更新

我想知道是否有办法在MongoDB中进行自引用更新,因此您可以在$ set查询中使用对象的参数.这是一个例子:

> db.labels.save({"name":"label1", "test":"hello"})
> db.labels.save({"name":"label2", "test":"hello"})
> db.labels.save({"name":"label3", "test":"hello"})
> db.labels.find()
{ "_id" : ObjectId("4f1200e2f8509434f1d28496"), "name" : "label1", "test" : "hello" }
{ "_id" : ObjectId("4f1200e6f8509434f1d28497"), "name" : "label2", "test" : "hello" }
{ "_id" : ObjectId("4f1200eaf8509434f1d28498"), "name" : "label3", "test" : "hello" }
Run Code Online (Sandbox Code Playgroud)

我看到,您可以使用$该语法,其中查询:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

> db.myCollection.find( { a : { $gt: 3 } } ); 
> db.myCollection.find( { $where: "this.a > 3" } );
> db.myCollection.find("this.a > 3");
> f = function() { return this.a > …
Run Code Online (Sandbox Code Playgroud)

self mongodb mongoid

7
推荐指数
1
解决办法
4055
查看次数

将字符串拆分为MongoDB中的子字符串或字符数组

我需要转换这样的字段:

{ 
    "_id" : ObjectId("576fd6e87d33ed2f37a6d526"), 
    "phoneme" : "JH OY1 N Z" 
}
Run Code Online (Sandbox Code Playgroud)

进入像这样的子串数组

{ 
    "_id" : ObjectId("576fd6e87d33ed2f37a6d526"), 
    "phonemes" : [ "JH", "OY1", "N", "Z" ] 
}
Run Code Online (Sandbox Code Playgroud)

有时会变成像这样的字符数组

{
    "_id" : ObjectId("576fd6e87d33ed2f37a6d526"), 
    "phonemes" : ["J", "H", " ", "O", "Y", "1", " ", "N", " ", "Z"]
}
Run Code Online (Sandbox Code Playgroud)

我在这里发现了一些将字符串转换为数组的代码,但是对于我的目的来说有点太简单了,因为只创建了一个数组元素.

db.members.find().snapshot().forEach( function (x) {
   x.photos = [{"uri": "/images/" + x.photos}];
   db.members.save(x);
 });
Run Code Online (Sandbox Code Playgroud)

我是否可以在mongo shell语句中使用整个javascript语言?

string mongodb aggregation-framework

7
推荐指数
2
解决办法
1万
查看次数

如何使用 MongoDB/Mongoose 中的先前值更新字段

例如,我有一些如下所示的文档:

{
    id: 1
    name: "foo"
}
Run Code Online (Sandbox Code Playgroud)

我想将另一个附加string到当前name字段值。

我使用 Mongoose 尝试了以下操作,但没有成功:

Model.findOneAndUpdate({ id: 1 }, { $set: { name: +"bar" } }, ...);
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

6
推荐指数
1
解决办法
2万
查看次数