我有一个带有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}}
)
有没有办法可以根据字段值进行查询并正确设置?我不明白为什么第一个有效,第二个没有。
答案 0 :(得分:0)
未定义,因为在第二个示例中,a
是cursor
- 指向查询结果集的指针,而在第一个示例中,您使用的是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}}
);