在mongoDB中按字段值查找文档时,字段设置为undefined

时间:2015-03-30 02:22:45

标签: mongodb

我有一个带有lat字段和long字段的mongoDB表。我想添加一个新的字段,它是一个数组。当我这样做时,字段设置正确:

var a = db.places.findOne();
var currentId = a._id;
var longitude = a.long;
var latitude = a.lat;
var lonLatPair = [longitude,latitude];

db.places.update(
    { _id: currentId},
    { $set : {location: lonLatPair}}
)

但是,当我使用a的_id时,这样做会将它们设置为undefined。

a = db.places.find({ _id : "ced25473-2786-4cab-990b-5179b74e6540"});
var currentId = a._id;
var longitude = a.long;
var latitude = a.lat;
var lonLatPair = [longitude,latitude];

db.places.update(
    { _id: currentId},
    { $set : {location: lonLatPair}}
)

有没有办法可以根据字段值进行查询并正确设置?我不明白为什么第一个有效,第二个没有。

1 个答案:

答案 0 :(得分:0)

未定义,因为在第二个示例中,acursor - 指向查询结果集的指针,而在第一个示例中,您使用的是findOne()方法返回一个满足指定查询条件的文档。如果多个文档满足查询,则此方法根据反映磁盘上文档顺序的自然顺序返回第一个文档,从而正确设置字段。您可能需要使用光标 find() 上的toArray()方法:

var currentId, longitude, longitude, lonLatPair; 

a = db.places.find({ _id: "ced25473-2786-4cab-990b-5179b74e6540"}).toArray();
if (a.length > 0) { 
    currentId = a[0]._id;
    longitude = a[0].long;
    latitude = a[0].lat;
    lonLatPair = [longitude, latitude];     
}

修改

或者,只需使用 findOne() 方法并将_id查询指定为参数:

var currentId, longitude, longitude, lonLatPair,
    a = db.places.findOne({ _id: "ced25473-2786-4cab-990b-5179b74e6540"});
currentId = a._id;
longitude = a.long;
latitude = a.lat;
lonLatPair = [longitude, latitude];

db.places.update(
    { _id: currentId},
    { $set : {location: lonLatPair}}
);