Lokijs查找给出了错误的响应

时间:2019-04-09 15:40:04

标签: node.js lokijs

Lokijs在Node JS环境中给出错误的查找响应

这是一个在线示例:

// This database has already been created for you.
// var db = new loki('sandbox');

// Add a collection to the database
var items = db.addCollection('items');

// Add some documents to the collection
items.insert({ name : 'mjolnir', owner: 'thor', maker: 'dwarves' });
items.insert({ name : 'gungnir', owner: 'odin', maker: 'elves' });
items.insert({ name : 'tyrfing', owner: 'Svafrlami', maker: 'dwarves' });
items.insert({ name : 'draupnir', owner: 'odin', maker: 'elves' });

// Find and update an existing document
var tyrfing = items.findOne({'name': 'tyrfing'});
tyrfing.owner = 'upated';


// These statements send to Text Output
logText('tyrfing value :');
logObject(tyrfing);
logText('tyrfing items');
logObject(items.find({ 'name': 'tyrfing' }));

// This statement sends to Inspector
inspectObject(db);

在插入几个伪数据之后;我正在从同一集合中获取数据,并将其分配给一个名为“ tyrfing”的模板变量;

现在,这是问题所在;我使用名为“ upated”的新值对owner属性进行了更新。即使我没有将loki保存/更新为更新;

当我叫find叫“ tyrfing”时,它的响应为

odins items
[
  {
    "name": "tyrfing",
    "owner": "upated",
    "maker": "dwarves",
    "meta": {
      "revision": 0,
      "created": 1554823595464,
      "version": 0
    },
    "$loki": 3
  }
]

这是不正确的,我希望响应中的所有者名称为“ Svafrlami”;因为我没有进行任何数据库提交;

如果我在这里做错了,请纠正我;

您可以在此处在线粘贴以下代码来测试此代码:http://www.obeliskos.com/LokiSandbox/

2 个答案:

答案 0 :(得分:1)

@Creator实际上,LokiJS的实现方式是在集合构造函数中传递clone选项:docs 您还可以指定要使用的克隆方法。

答案 1 :(得分:0)

我花了几分钟才弄明白了。 items.find返回实际/真实对象引用;因此,如果我进行任何更改,它也将反映在原始文件中;

这样我就克隆了从发现中得到的原始对象,然后对克隆对象进行了更改,它就起作用了:)

这是代码:

var clone = require('clone');
// Find and update an existing document
var tyrfing = items.findOne({'name': 'tyrfing'});
var temptyrfing = clone(tyrfing);
temptyrfing.owner = 'upated';


// These statements send to Text Output
logText('tyrfing value :');
logObject(temptyrfing);
logText('tyrfing items');
logObject(items.find({ 'name': 'tyrfing' }));

我使用“克隆” npm模块来克隆对象

如果还有其他可能的话,请发给我;